Ajouter un commentaire

thesuixx
probleme inexplicable

salut, je debute en c et je viens de passer 3 heures à essayer de trouver une erreur dans une fonction.
Quelqu'un sait où est l'erreur:

/**
*renvoie un string de la forme "num=\"0n\"" ou nh est le numero de la zone
* @param nomFicJourn: le nom du fichier journal
* @return un string de la forme "num=\"0n\"" ou nh est le numero de la zone
*/
char* nomJournalToNumZone(char nomFicJourn[]){
	printf("nomFicJournal %s\n",nomFicJourn);
	fflush(stdout);
	
	int i = 0, cptNumJourn = 5;
	char *positioneurDeb, *positioneurFin, *copieFicJourn;

	copieFicJourn = (char*) calloc(strlen(nomFicJourn), sizeof(char));
	strcpy(copieFicJourn, nomFicJourn);
	
	numJournal = "num=\"00\"";

	if (strstr(copieFicJourn,PREFIX_FIC_JOURN) != NULL && strstr(copieFicJourn,SEPARATEUR_FIC_JOURN) != NULL){
		positioneurDeb = strstr(copieFicJourn,PREFIX_FIC_JOURN)+sizeof(char);  // on se place apres le prefix
		positioneurFin = strstr(copieFicJourn,SEPARATEUR_FIC_JOURN);  // on se place sur le separateur "-"

		while (i < positioneurFin - positioneurDeb){
			printf("debJournal : %d , valeur = %c \n",nomFicJourn, *nomFicJourn);
			printf("copieFicJourn : %d , valeur = %c \n",copieFicJourn, *copieFicJourn);
			printf("positioneurDeb : %d , valeur = %c \n",positioneurDeb, *positioneurDeb);
			printf("positioneurFin : %d , valeur = %c \n",positioneurFin, *positioneurFin);
			printf("strlen = %d , journal = %s \n", strlen(numJournal), numJournal);
			printf("numJournal[cptNumJourn + i] : %c \n ",numJournal[cptNumJourn + i]);
			printf("indnumJournal : %d \n", cptNumJourn +i);
			printf("*(positioneurDeb + i) : %c \n" , *(positioneurDeb + i));
			
			fflush(stdout);
			numJournal[cptNumJourn + i] = *(positioneurDeb + i);
			i++;
		}
	}
	printf("%s \n", numJournal);
	fflush(stdout);
	printf("nomFicJournal %s\n",copieFicJourn);
	fflush(stdout);
	return numJournal;
}

et voici le resultat:
nomFicJournal j04-19940921.xml
debJournal : 4215072 , valeur = j
copieFicJourn : 6686608 , valeur = j
positioneurDeb : 6686609 , valeur = 0
positioneurFin : 6686611 , valeur = -
strlen = 8 , journal = num="00"
numJournal[cptNumJourn + i] : 0
 indnumJournal : 5
*(positioneurDeb + i) : 0
      8 [main] passerelle 2912 _cygtls::handle_exceptions: Error while dumping s
tate (probably corrupted stack)
./lancer.sh: line 3:  2912 Segmentation fault      (core dumped) passerelle.exe
2 testCalamar/zonecalam.xml testCalamar/j04-19940921.xml res.bid

en sortie, je devrais avoir num="04" ( "num=\"04\"" ) , où 04 est la partie du nom de fichier j04-19940921 entre le j et le -

La declaration du tab:

char *numJournal; 

les define:
#define PREFIX_FIC_JOURN 		"j"   // la premiere lettre des fichiers journaux (choix d'un string pour modifications futures)
#define SEPARATEUR_FIC_JOURN 	"-"   // choix d'un string pour modif futures

voila, comme vous voyez, j'ai printé à peu pres tout mais je trouve toujours pas de probleme, si quelqu'un peut me dire où est le probleme ca serait super
merci d'avance

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 V     V  DDD   FFFF  Y   Y  Y   Y 
V V D D F Y Y Y Y
V V D D FFF Y Y
V V D D F Y Y
V DDD F Y Y