Kurpeus1
Messages postés42Date d'inscriptionlundi 16 octobre 2006StatutMembreDernière intervention21 mars 2007
-
31 oct. 2006 à 14:29
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013
-
31 oct. 2006 à 15:12
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
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 31 oct. 2006 à 14:46
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.
Kurpeus1
Messages postés42Date d'inscriptionlundi 16 octobre 2006StatutMembreDernière intervention21 mars 2007 31 oct. 2006 à 14:54
Ok merci a tous pour ces réponse,
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
Enfin merci a tous :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Kurpeus1
Messages postés42Date d'inscriptionlundi 16 octobre 2006StatutMembreDernière intervention21 mars 2007 31 oct. 2006 à 14:56
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)
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 31 oct. 2006 à 15:12
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(...).