Bonjour a tous, désolé pour la question tellement récursive que je m'apprete a émettre. je cherche a lire dans un fichier, j'utilise scanf pour chercher mes champs ( pour l'instant je n'en ai qu'un de la forme path = chemin_d'accès. Je crée donc des chaines de caractères (pathName, pathValue, etc). Ce que j'ai écrit en dessous fonctionne, mais je n'aime pas du tout l'écriture, je la trouve brouillon. Je me perds un peu entre les pointeurs, les adresses mémoires et comment réaffecter un pointeur vers l'adresse d'un autre pointeur (c'est ce que j'essaye de faire à la ligne
( *pathName = (char*)&testName ). Merci
Pourquoi ouvres tu 2 fois le fichier (fopen), c'est pas la peine.
Ensuite,
Attention dans scanf :
char* testName[max]; // c'est testName ou &testName[0] le pointeur, pas &testName !
Attention strcmp renvoi 0 pour macth ! donc if( !strcmp(..., ...) )
Enfin, pas d'affectation de pointeur puisque tu alloues les chaines !!!
Donc :
strcpy(pathName, testName); et pas *pathName= (char*)&testName; !
Sinon, si tu travailles en Win32, Regardes a :
GetPrivateProfileString() // recup chaine dans ini
GetPrivateProfileInt() // recup int dans ini
ect... pour ecrire aussi, SetPrivateProfileString()
Voila, n'oublie pas que tes tableau sont en fait des pointeurs.
Des pointeurs qui indiquent l'adresse du premier element de chaque tableau.
C'est pourquoi tu peux te passer des & dans fscanf() pour tes variables testName et testValue.
Alors juste pour répondre aux questions diverses, déjà pour scanf j'avais lu dans une page qu'on était obligé de passer l'adresse mémoire du tableau. Ensuite pour l'ouverture du fichier, j'ai vu un type dire que lorsqu'on faisait :
if( (settings fopen(param, "r")) NULL){
fprintf(stdout, "fichier settings.ini manquant\n");
exit(-1);
il regardait juste si le fichier pouvait etre ouvert mais ne l'ouvrait pas, d'ou la deuxième ouverture a l'extérieure du if
arff on peut pazs éditer ses réponses, c'est un peu dommage, bon juste pour dire que j'écris en C, donc il ne me semble pas que je puisse faire de new (cf la dernière réponse)
En C le new n'existe pas en effet. Il faut utiliser les primitives de type malloc(...).
Sans oublier de liberer les pointeurs en fin d'utilisation en appellant free(...).