salut à tous,

depuis hier je me bats avec ce problème,

je veux récupérer dans ma BDD la liste des dates de chaque entrée dans un tableau dynamique de char à 2 dimensions dont 1 fixe.

voici ce que j'ai codé, ça tourne sans segfault mais ne m'affiche rien au retour du callback, le tableau retourné semble vide.

J'ai cherché pendant bien 4 ou 5h hier, mais je m'en sors pas, étant plus électronicien qu'informaticien...

L'allocation du tableau :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
        char **dates = NULL;
 
        dates = (char **)malloc(sizeof(char*));
        if(dates == NULL){
            fprintf(stderr, "Unable to allocate memory for Dates table.");
            exit(EXIT_FAILURE);
        }
...
        selectDates(db, dates);
le code qui pose souci :
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
void selectDates(sqlite3 *db, char **dates){
 
    int i=0;
    char *zErrMsg = 0;
    char *requete = "SELECT date FROM entries;";
 
    if (sqlite3_exec (db, requete, selectDatesCallback, (void *)&dates, &zErrMsg) != SQLITE_OK){
        printf (":(\n");
    }
 
    fprintf(stderr, "fprintf %ld\n", strlen(dates));
    for(i=0; i<strlen(dates); i++){
 
        fprintf(stderr, "%s\n", dates[i]);
    }
}
le callback :
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
int selectDatesCallback(void *dates, int argc, char **argv, char **azColName){
 
    int i;
 
    realloc_s(dates, argc * sizeof(char *));
 
 
    for(i=0; i<argc; i++){
 
        printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
 
        char *temp;
 
        temp = (char *)malloc(32 * sizeof(char));
        if(temp == NULL){
            fprintf(stderr, "Unable to allocate memory for Dates table.");
            exit(EXIT_FAILURE);
        }
 
        fprintf(stderr, "strcpy");
        strcpy(temp, argv[i]);
        fprintf(stderr, "%s\n", temp);
 
        dates = temp;
        fprintf(stderr, "fprintf %ld\n", strlen(dates));
        fprintf(stderr, "%s\n", (char *)dates);
        dates++;
 
    }
 
    printf("End\n");
    return 0;
}