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

