Segmentaiton fault C

wazaaaa -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
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 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
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 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
Oui, mais c'est plus court... ;)
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
qu'est-ce qui est plus court ? de taper "void" à la place de "int" ???
0