Bonjour, je viens vous demander un peu d'aide.

Je travaille sur un programme en C depuis 3 ans, et j'utilisais gcc3.
De nouvelles contraintes m'imposent gcc4 et je ne pensais pas que j'aurais eu autant de problemes.
Apres avoir mieux ecrit les cast, j'ai réussi à compiler mon programme sans erreur, ni warning.

Malheuresement à l'execution, j'obtiens un Segmentation fault.

Gdb me dit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
Program received signal SIGSEGV, Segmentation fault.
0xb7c1a4c0 in strcpy () from /lib/tls/libc.so.6
(gdb) info thread 
* 1 Thread -1214757184 (LWP 4736)  0xb7c1a4c0 in strcpy () from /lib/tls/libc.so.6
(gdb) backtrace 
#0  0xb7c1a4c0 in strcpy () from /lib/tls/libc.so.6
#1  0x0804a4b9 in litConfig () at prog.c:300
#2  0x080a8a97 in main (argc=1, argv=0xbf815b64) at prog.c:20691
(gdb) frame 0 
#0  0xb7c1a4c0 in strcpy () from /lib/tls/libc.so.6
La ligne incriminée est l'utilisation de sprintf.

Je résume la partie de code qui pose pb :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
int litConfig()
{
  FILE * conf ;
  char buffer[150];
  char ligne[100];
  char* separateurs = { " \n" };
  char* p;
  char pt[30];
 
  strcpy(buffer,DOSSIERCONF);
  strcat(buffer,"/config");
 
  if((conf = fopen (buffer,"r")) == NULL)
  {
    printf("Erreur ouverture config %s",buffer);
    return 0;
  }
 
  while (fgets (ligne, sizeof(ligne), conf) != NULL)
  {
    //premier appel, renvoie le premier mot
    p = strtok(ligne, separateurs);
    // ligne où gdb annonce l'erreur :
    sprintf(pt,"%s", p);
 
    if (!strcmp(p,"fullscreen"))
    {
      if (p != NULL ) p = strtok(NULL, separateurs);
      sprintf(pt,"%s", p);
      if (p != NULL ) config.FULLSCREEN=atoi(pt);
    }
  }
}
Je pense que gcc4 n'aime pas cette façon de faire sans malloc.
Savez vous comment je peux corriger cela ?

Merci pour votre aide.