AJBM Posted December 15, 2012 at 06:18 PM Report #487272 Posted December 15, 2012 at 06:18 PM 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); }
pikax Posted December 15, 2012 at 06:22 PM Report #487273 Posted December 15, 2012 at 06:22 PM 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."
AJBM Posted December 15, 2012 at 06:45 PM Author Report #487278 Posted December 15, 2012 at 06:45 PM 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; }
pikax Posted December 15, 2012 at 06:49 PM Report #487279 Posted December 15, 2012 at 06:49 PM 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."
brunoais Posted December 15, 2012 at 06:56 PM Report #487280 Posted December 15, 2012 at 06:56 PM 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%.
AJBM Posted December 15, 2012 at 07:10 PM Author Report #487282 Posted December 15, 2012 at 07:10 PM Não é necessário fazer free?
HappyHippyHippo Posted December 15, 2012 at 07:31 PM Report #487285 Posted December 15, 2012 at 07:31 PM 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 😄 IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
AJBM Posted December 15, 2012 at 08:00 PM Author Report #487286 Posted December 15, 2012 at 08:00 PM (edited) 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? Edited December 15, 2012 at 08:18 PM by AJBM
AJBM Posted December 15, 2012 at 08:45 PM Author Report #487291 Posted December 15, 2012 at 08:45 PM 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
ricardosequeira Posted December 15, 2012 at 09:19 PM Report #487296 Posted December 15, 2012 at 09:19 PM Usa o strcpy Ex.: strcpy(Estrutura.string,outrastring); Ricardo Sequeira
AJBM Posted December 15, 2012 at 10:11 PM Author Report #487302 Posted December 15, 2012 at 10:11 PM obrigado funcionou 👍 já agora podes dizer me porque? E outra pergunta o fgets() põe um \n no final da string é possível retirara lo ?
HappyHippyHippo Posted December 15, 2012 at 10:18 PM Report #487304 Posted December 15, 2012 at 10:18 PM obrigado funcionou 👍 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 Portugol Plus
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now