Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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;
}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>tentei utilizar std::string, mas o compilador me disse que "string" não é um menbro de std...
como utilizo?
tentei assim
std::string teste;
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
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);