viciado 1 Denunciar post Postado Junho 11, 2009 Implementei a função strchr. Compilo no dev e ele finaliza o programa após informar caractere. #include <stdio.h> #include <stdlib.h> char *strchr(char *ptr,char ch){ while(*ptr != '\0') if(*ptr == ch) return ptr; else ptr++; return NULL; } int main() { char s[20], c; printf("Digite uma string: "); gets(s); printf("\n Digite um caractere: "); scanf("%s", &c); puts(strchr(s,c)); system("PAUSE"); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Junho 11, 2009 isis@linux-gy11:~/Imasters> ./a.out Digite uma string: asdzxc Digite um caractere: a Falha de segmentação 17 puts(strchr(s,c));(gdb) s Breakpoint 3, strchr (ptr=0xbffff110 "", ch=101 'e') at vcdo.c:4 4 while(*ptr != '\0') (gdb) display ptr 1: ptr = 0xbffff110 "" (gdb) s Breakpoint 4, strchr (ptr=0xbffff110 "", ch=101 'e') at vcdo.c:9 9 return NULL; 1: ptr = 0xbffff110 "" Dá uma olhada em como você tá lendo o char... Pela enésima vez: Não use gets isis@linux-gy11:~/Imasters> ./a.out Digite uma string: jjjsjsjasjsajsjsaksad9as9du0as98d0a8sd08as0d8a9s8d90qw798e4q6wrtwe6aogirgyaeuryi oawer Digite um caractere: s sjsjasjsajsjsaksad9as9du0as98d0a8sd08as0d8a9s8d90qw798e4q6wrtwe6aogirgyaeuryioaw er Falha de segmentação E você vai imprimir muita coisa se a função não encontrar nada... SIGSEV de novo. O if é mutuamente exclusivo => não precisa do else. Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Junho 11, 2009 Não use IDE's para aprender a programar, você não fica sabendo os erros que o compilador aponta... meu output foi muito semelhante ao da Isis, da uma olhada: victor@matrix:~/Desktop$ gcc -Wall -Wextra viciado.c viciado.c:28: warning: conflicting types for built-in function ‘strchr’ /tmp/ccGHMLji.o: In function `main': viciado.c:(.text+0x6a): warning: the `gets' function is dangerous and should not be used. victor@matrix:~/Desktop$ ./a.out Digite uma string: teste Digite um caractere: f Segmentation fault victor@matrix:~/Desktop$ ./a.out Digite uma string: teste Digite um caractere: e Segmentation fault Ok, o que está dando errado então? cof cof "%s" é para ler strings cof cof... Tome cuidado com o "return NULL" da sua função... você não pode imprimir NULL com "%s", vai dar segmentation fault, como comprovou-se com o meu output. Compartilhar este post Link para o post Compartilhar em outros sites
viciado 1 Denunciar post Postado Junho 11, 2009 Obrigado Compartilhar este post Link para o post Compartilhar em outros sites