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