Segmentaiton fault C

wazaaaa -  
Char Snipeur Messages postés 10112 Statut Contributeur -
Bonjour,


j'ai un probleme quand j'essaie de lire ce qui suit :

char *buffer;
printf("tapez quelques chose")
scanf("%s", buffer):

des que je tape quelques chose pour la lecture j'ai cette erreur ''Segmentation default''

pourtant ça travaille tres bien sur mon premier pc mais pas sur le deuxieme, je suis sur ubuntu avec gcc/

2 réponses

fiddy Messages postés 11653 Statut Contributeur 1 847
 
Bonjour,

Tu n'as rien alloué, le segfault est donc tout à fait normal.
Lorsque tu fais char *buffer, cela créé un pointeur mais il pointe sur rien.
Il faut le faire pointer sur une zone mémoire avec malloc.
Par exemple buffer=malloc(50);
Et avant la fin du programme : free(buffer);
Ou tu peux faire directement : char buffer[50];
Dans ce cas, il ne faudra pas dépasser la phrase de 49 caractères.
Cdlt,

Google is your friend
1
jisisv Messages postés 3678 Statut Modérateur 935
 
C'est normal. Tu écris dans la zone mémoire pointée par buffer.
Or ce pointeur n'est pas initialisé, d'où écriture dans une zone aléatoire.
Réserve un buffer statique ou dynamique.
exemple
johand@osiris: ~/src/CCM/C $ cat segfault.c
# include <stdio.h>

void main(void)
{
  char buffer[10];
  printf("tapez quelques chose ");
  scanf("%9s", buffer);
  printf("You wrote %s\n", buffer);
}
  
johand@osiris: ~/src/CCM/C $ gcc -Wall -o segfault segfault.c
segfault.c:3:6: warning: return type of `main' is not `int' [-Wmain]

0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Bonjour jisisv,
Juste pour info, le prototype de main c'est int main (void), c'est ce qui explique ton warning.
Cdlt,
0
jisisv Messages postés 3678 Statut Modérateur 935
 
Oui, mais c'est plus court... ;)
0
Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
qu'est-ce qui est plus court ? de taper "void" à la place de "int" ???
0