Segmentation fault sur chaine de caractère. Bizarrrre

Segmentation fault sur chaine de caractère. Bizarrrre - C - Programmation

Marsh Posté le 24-04-2008 à 15:59:38    

Bonjour à tous,
 
J'ai un problème curieux,  
 
Lorsque j'appelle deux fois de suite ce code :
 

gchar c_nouveau_nom[30] = "";        
 // Scinde et copie le nom de l'image dans nom  
 strcpy(c_nouveau_nom,strtok(ps_Struct->t_nom_image[i],"." ));
 // Ajout de _rectif à  la fin de la chaine
 strcpy(c_nouveau_nom, "_rectif" );
  // Scinde et copie l extention de limage
 strcpy(c_nouveau_nom,strtok(NULL,"." ));
        // enregistrement de la convolution entre le masque et l'image


 
L 'exécution fait un segmentation fault sur la première ligne, je ne comprends pas pourquoi..
 
Merci


Message édité par jijiz le 24-04-2008 à 16:00:02
Reply

Marsh Posté le 24-04-2008 à 15:59:38   

Reply

Marsh Posté le 24-04-2008 à 16:19:32    

Bah, moi je vois plein de trucs qui merdent dans ton code :
 

  • strtok va modifier ta chaine (sans la restaurer), du coup lors du second appel tu te tapes un NULL.
  • strcpy ça n'est pas la même chose que strcat.
  • Et sinon les buffer overflow t'as déjà entendu parlé de ça ? Edit: surtout avec 30 caractères comme buffer.


Statistiques : 4 lignes de code, 3 lignes foireuses.
 


Message édité par tpierron le 24-04-2008 à 16:22:01
Reply

Marsh Posté le 24-04-2008 à 16:27:32    

bon ok, dslé j'ai fait de la merde pour le cat (j'ai confondu... je vais m'autoflageler). Et oui c'est vrai que strtok modifie la chaine, je vais empecher d'appeler deux fois cette fonction.
 
Merci !
 
Ca marche :

       // Convolution de pix_masque avec l'image en cours
        // nouveau nom de l'image :
 gchar c_nouveau_nom[30] = "";
        gchar c_tmp[80] = "";
        strcpy(c_tmp, ps_Struct->t_nom_image[i]);
        //gchar tmp[80] = "";
         
 // Scinde et copie le nom de l'image dans nom  
 strcpy(c_nouveau_nom,strtok(c_tmp,"." ));
 // Ajout de _rectif à  la fin de la chaine
 strcat(c_nouveau_nom, "_rectif." );
  // Scinde et copie l extention de limage
 strcat(c_nouveau_nom,strtok(NULL,"." ));
 
        printf("Nom de la nouvelle image : %s\n",c_nouveau_nom);
        // enregistrement de la convolution entre le masque et l'image


Message édité par jijiz le 24-04-2008 à 16:32:04
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed