[Langage C] comment passer un char **tab dans un void *ptr du callback sqlite ?
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:
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:
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:
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;
} |