Raficcha 1 Denunciar post Postado Agosto 26, 2009 Opa, beleza. Esou fazendo uma função para pegar o nome de um arquivo. Esta função deve retornar um "string"(const char *string). const char *string; char GetFileName(const char *filename){ int cont = StrLen(filename)-1; int cont2; char nome[255]; string retorno = ""; int cont_retorno = 0; while (filename[cont] != '\\'){ cont--; } cont++; for (cont2 = cont; cont2 < StrLen(filename); cont2++){ nome[cont_retorno] = filename[cont2]; cont_retorno++; } nome[cont_retorno] = char(0); retorno = nome; return retorno; } porem o valor retornado pela função é um monte de caracteres estranahos. Se eu colocar antes do return retorno um printf("%s", retorno) o valor retorna corretamente. alguem pode me ajudar a explicar o que está acontecendo? Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Agosto 26, 2009 Fala Raficcha, tudo certo? Cara, pra quem ja mechia com threads, você não poderia fazer erros deste tipo! você leu o que o compilador te falou? Leia! Ele vai apontar todos os erros. você usa o gcc? se sim, compile com as opções -Wall -Wextra pra já: const char* string; O que é isso? Não se esqueça como se declaram funções: tipo_de_retorno nome_da_função(tipo_par1 par1, tipo_par2 par2, ..., tipo_parN parN); Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Agosto 27, 2009 Ow, fiz uma confusão ali em cima, no cabeçalho da função tem "char", mas na verdade é "string". ow, pra mim utilizar strings em C++ tenho que utilizar #include <iostream.h> que aumenta em mais de 400Kb o programa. Ja tentei utilizar so #include <strings.h> e #include <string.h> mas não tem o tipo string. então defino o tipo typedef const char *string. É assim que eu utilizo as strings. Isso esta muito errado? Bah, me perdi logo nas strings.. bom, aquele char no começo do cabeçalho nem sei pq eu coloquei.. a função que eu tenho aqui é typedef const char *string; string GetFileName(string filename){ int cont = StrLen(filename)-1; int cont2; char nome[255]; string retorno = ""; int cont_retorno = 0; while (filename[cont] != '\\'){ cont--; } cont++; for (cont2 = cont; cont2 < StrLen(filename); cont2++){ nome[cont_retorno] = filename[cont2]; cont_retorno++; } nome[cont_retorno] = char(0); retorno = nome; return retorno; } Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Agosto 27, 2009 Sim, é desaconselhável o uso de ponteiros, para strings/arrays, em c++. Para strings, possuimos a std::string, uma classe MUITO mais fácil de usar do que os antigos char* do C. Para arrays, eu aconselho o uso de std::vector. É mais seguro e vai prevenir muitos segmentation faults. As strings: http://www.cplusplus.com/reference/string/string/ Detalhe, cabeçalhos do c++ não possuem o sufixo "h" Use: #include <iostream> #include <string> #include <fstream> ... Para usar cabeçalhos do C, apenas adiciona a letra 'c' ao início do nome: #include <cmath> // o mesmo que dizer #include <math.h> EM C #include <cstdlib> Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Agosto 27, 2009 tentei utilizar std::string, mas o compilador me disse que "string" não é um menbro de std... como utilizo? tentei assim std::string teste; Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Agosto 27, 2009 você incluiu <string> no seu código? (#include <string>) você está compilando com o que? Se ainda restarem problemas, poste o código. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites