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 :
le code qui pose souci :
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 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 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]); } }
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; }
Partager