C++ popen /fgets
Résolu/Fermé
developper55
Messages postés
123
Date d'inscription
vendredi 28 décembre 2007
Statut
Membre
Dernière intervention
30 mai 2012
-
20 févr. 2009 à 22:16
loupius - 23 févr. 2009 à 14:52
loupius - 23 févr. 2009 à 14:52
A voir également:
- Popen c++
- Popen office - Télécharger - Suite bureautique
3 réponses
developper55
Messages postés
123
Date d'inscription
vendredi 28 décembre 2007
Statut
Membre
Dernière intervention
30 mai 2012
9
23 févr. 2009 à 14:39
23 févr. 2009 à 14:39
Mensieur,
été trop facile, il suffit d'utiliser fopen(ou popen) avec fscan,,,, et cé tout,,,,
char var1[9]="";
char var2[9]="";
FILE *f_fichier;
f_fichier=popen("fichier.txt","r" );
fscanf(f_fichier,"%s %s",var1,var2);
printf("%s,%s\n",var1,var2);
return 0;
}
merci pour loupius, mamiemando,
merci tout le monde
@+
été trop facile, il suffit d'utiliser fopen(ou popen) avec fscan,,,, et cé tout,,,,
char var1[9]="";
char var2[9]="";
FILE *f_fichier;
f_fichier=popen("fichier.txt","r" );
fscanf(f_fichier,"%s %s",var1,var2);
printf("%s,%s\n",var1,var2);
return 0;
}
merci pour loupius, mamiemando,
merci tout le monde
@+
Classique, segmentation fault -> mauvaise allocation pointeur (dans 99 % des cas) !
Alors où se trouve l'erreur ?
Dans la fonction void get_values(char* ligne, float *v1, float *v2), il y a la fonction sscanf(result, "%f", v1); qui est bien utilisée et qui suppose que 'v1' est un pointeur sur une case mémoire (ici de type float).
Or get_values(line, &(value1[i]), &(value2[i])); envoie bien un pointeur mais float *value1 = NULL; initialise un pointeur mais n'alloue aucune case mémoire ===>>> plantage assuré.
Je ne vais pas plus loin; il y a peut-être d'autres erreurs... mais il faut d'abord corriger celle-ci.
Evidemment l'erreur est la même pout 'v2'.
Bon courage.
Nota: A la place de get_values(line, &(value1[i]), &(value2[i]));, autant mettre get_values(line, value1, value2);.
Alors où se trouve l'erreur ?
Dans la fonction void get_values(char* ligne, float *v1, float *v2), il y a la fonction sscanf(result, "%f", v1); qui est bien utilisée et qui suppose que 'v1' est un pointeur sur une case mémoire (ici de type float).
Or get_values(line, &(value1[i]), &(value2[i])); envoie bien un pointeur mais float *value1 = NULL; initialise un pointeur mais n'alloue aucune case mémoire ===>>> plantage assuré.
Je ne vais pas plus loin; il y a peut-être d'autres erreurs... mais il faut d'abord corriger celle-ci.
Evidemment l'erreur est la même pout 'v2'.
Bon courage.
Nota: A la place de get_values(line, &(value1[i]), &(value2[i]));, autant mettre get_values(line, value1, value2);.
mamiemando
Messages postés
33334
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
4 novembre 2024
7 801
21 févr. 2009 à 13:24
21 févr. 2009 à 13:24
Sinon il n'est pas plus simple de faire un execvp dont tu rediriges les résultats dans un fichier que tu lis après exécutaion de la commande ?
http://www.linux-kheops.com/doc/man/manfr/man-ascii-0.9/man3/execvp.3.txt.html
Donc si tu reprends cet exemple la commande df -h voit la sortie d'erreur et la sortie standard redirigées vers plop. Il suffit d'appeler ta commande de la même façon et de lire pouet.txt après coup... non ?
Bonne chance
http://www.linux-kheops.com/doc/man/manfr/man-ascii-0.9/man3/execvp.3.txt.html
(mando@aldur) (~) $ df -h 1>pouet.txt 2>pouet.txt (mando@aldur) (~) $ cat pouet.txt Sys. de fich. Tail. Occ. Disp. %Occ. Monté sur /dev/hda2 27G 15G 11G 60% / tmpfs 253M 0 253M 0% /lib/init/rw udev 10M 100K 10M 1% /dev tmpfs 253M 0 253M 0% /dev/shm /dev/hda1 9,8G 3,7G 6,1G 38% /mnt/ntfs /dev/hdb1 77G 51G 27G 66% /mnt/vfat
Donc si tu reprends cet exemple la commande df -h voit la sortie d'erreur et la sortie standard redirigées vers plop. Il suffit d'appeler ta commande de la même façon et de lire pouet.txt après coup... non ?
Bonne chance
23 févr. 2009 à 14:52