Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

AJBM

[Resolvido] Retornar String

Mensagens Recomendadas

AJBM

Boas!

Eu estou com dificuldades em retornar uma string e usar o seu valor, eu estive a ver algumas coisas na net e fiz isto,.

char* pedirNome(){

 char nome[9];
 printf("Nome: ");
 fgets(nome,9,stdin);
 return nome;
}
int main(int argc, char** argv) {
 char *nome[9];
 nome=pedirNome();
 printf("Nome: %s",*nome);
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

tu no pedir nome estas a retornar uma variavel que e' destruida apos sair da funcao. Tens que alocar memora e returnar.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

Eu ainda não dei apontadores por isso ainda não percebo muito bem, é algo assim

char* pedirNome(){

   char *nome[9];
   nome=(char*)malloc(sizeof(9));
   printf("Nome: ");
   fgets(nome,9,stdin);
   return nome;
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

seria mais algo assim:

char *pedirNome()
{
 char *nome = malloc(sizeof(char)*9);//o sizeof e' desnecessario, ja' que o char tem 1 byte
 scanf("%s",nome);
 return nome;
}


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

char *pedirNome()
{
 char *nome = malloc(sizeof(char)*9);//o sizeof e' desnecessario, ja' que o char tem 1 byte
 scanf("%s",nome);
 return nome;
}

Cuidado com heap overrun.

char *pedirNome()
{
 char *nome = malloc(sizeof(char)*9);//o sizeof e' desnecessario, ja' que o char tem 1 byte
 scanf("%8s",nome);
 return nome;
}


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

na realidade, seria melhor assim :

void pedirNome(char * buffer, int buffer_size){
 printf("Nome: ");
 fgets(buffer,buffer_size,stdin);
}

int main(int argc, char** argv) {
 char nome[9]; // <------------------------------ cuidado, tinhas uma array de ponteiros !!!
 pedirNome(nome, 9);
 printf("Nome: %s",nome);
}

quantidade de malloc's e free's : 0 !!!

urra, ganhei :D


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

lol..

tens char * buffer, porque passas depois um array de char nome, que é a mesma coisa que passar o endereço de memoria nome[0] certo?

Editado por AJBM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

Outra pergunta se eu tiver uma string numa estrutura de dados posso fazer isto Estrutura.string=outrastring; certo? é que eu faço uma atribuição desta e da me erro de tipos imcompativeis

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

obrigado funcionou :thumbsup: já agora podes dizer me porque?

E outra pergunta o fgets() põe um \n no final da string é possível retirara lo ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

obrigado funcionou :thumbsup: já agora podes dizer me porque?

perceberás quando aprenderes ponteiros

E outra pergunta o fgets() põe um \n no final da string é possível retirara lo ?

if (((char*)c = strrchr(buffer, '\n')) != NULL) *c = '\0'; // não testado


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.