Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

viciado

[Resolvido] Ponteiro

Recommended Posts

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@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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.