Cornelius 0 Denunciar post Postado Agosto 7, 2008 Estou com dificuldades para comparar strings. Fiz um código básico para entender melhor mais não vai, dêem uma olhada: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char nome[5],cnome[5]; int ok; printf("Digite seu nome\n"); scanf("%s",&nome); printf("Digite outro nome\n"); scanf("%s",&cnome); ok=strcmp(nome,cnome); printf("%d",&ok); system("pause"); } Se alguém tiver uma idéia ou um site legal para entender melhor, eu agradeço. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Agosto 7, 2008 O ideal nesse caso é usar a função fgets para ler a string. Com ela voce limita a quantidade de caracteres a serem lidos. Procure aqui no fórum tem muito material sobre ela. strcmp retorna "0" se as strings forem iguais. Em printf voce quer imprimir o endereço da variável ou conteúdo? Compartilhar este post Link para o post Compartilhar em outros sites
Cornelius 0 Denunciar post Postado Agosto 7, 2008 Então kandrade, bom ter perguntado: olha só o parte do código: int incluir_nota() { int i; char cnome[15]; printf("Digite seu nome\n"); fgets(cnome,stdin); //aki ta a dúvida, não consegui fazer a sintaxe certa. ok=strcmp(cnome,cadastro.nome); //cadastro.nome já está com algo escrito nela if(ok==0) { for(i=1;i<4;i++) { printf("Digite a %d nota\n",i); scanf("%d",&cadastro.nota[i]); } } else { printf("Nome nao cadastrado.\n"); incluir(); } } Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Agosto 7, 2008 Sintaxe do fgets é: fgets(cnome,15,stdin); 15 é o número máximo a ser lido que na realidade não é 15 é 14 pois o último caracter é o fim de string \0. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
alanwxu 0 Denunciar post Postado Agosto 7, 2008 bom so dando uma consertada CODE #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char nome[10],cnome[10]; printf("Digite seu nome\n"); fgets(nome,9,stdin); printf("Digite outro nome\n"); fgets(cnome,9,stdin); if(strcmp(nome,cnome)) puts("Diferentes"); else puts("Iguais"); system("pause"); } como nosso amigo ali em cima falo. use fgets pq você pode limita o tamanho da string a ser lida, assim evita estouro de buffer. Compartilhar este post Link para o post Compartilhar em outros sites
Cornelius 0 Denunciar post Postado Agosto 7, 2008 beleza gente, consegui. Obrigado pela ajuda http://forum.imasters.com.br/public/style_emoticons/default/joia.gif. Então só pra ver se eu entendi Alanwxu: O comando strcmp no if se for verdadeiro vai ser o diferente? Compartilhar este post Link para o post Compartilhar em outros sites
alanwxu 0 Denunciar post Postado Agosto 7, 2008 sim, pq 0 é = falso e qualquer valor diferente de 0 é = verdadeiro. poderia fazer assim tbm: if(!strcmp(nome,cnome)) puts("Iguais"); else puts("Diferentes"); observe o operador "!" Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 7, 2008 como nosso amigo ali em cima falo. use fgets pq você pode limita o tamanho da string a ser lida, assim evita estouro de buffer.que erros podem ocorrer caso estoure o buffer? Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Agosto 8, 2008 No pior caso, invasão do computador e sobrescrita de partes do programa em memória,o que termina num endereço de retorno errado (e na maioria das vezes, sem permissão de modificação). http://www.windowsecurity.com/articles/Ana...ow_Attacks.html Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Agosto 8, 2008 Pode ler isso também. http://en.wikipedia.org/wiki/Buffer_overflow Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 9, 2008 vlws, mas não sei inglês "/ Compartilhar este post Link para o post Compartilhar em outros sites