Comment utiliser scanf \ fscanf pour lire une ligne et d'analyser dans des variables?
Je suis en train de lire un fichier texte construit avec le format suivant dans chaque ligne:
char*,char*,int
c'est à dire:
aaaaa dfdsd,23
bbbasdaa,ddd,100
je veux utiliser fscanf pour lire une ligne du fichier, et d'analyser automatiquement la ligne dans la varilables string1,string2,l'intA
Quelle est la façon correcte de le faire ?
Grâce
Le format serait
non, mon mauvais. serait comme vous l'avez dit
string, string, int
: les lignes ne contiennent pas des adresses de mémoire, ils faire?non, mon mauvais. serait comme vous l'avez dit
OriginalL'auteur RanH | 2011-03-05
Vous devez vous connecter pour publier un commentaire.
En supposant que vous avez:
que vous pouvez faire:
%[^,]
lit une chaîne de non-virgules et s'arrête à la première virgule.19
est le nombre maximum de caractères à lire (en supposant une taille de mémoire tampon de 20), de sorte que vous n'avez pas de dépassements de la mémoire tampon.Yup. Bienvenue à la joie de C de style de manipulation de chaîne. La "bonne" réponse est d'utiliser quelque chose qui ressemble à du C++std::string. Le "paresseux" la réponse est le plus populaire char toto[1000].
OriginalL'auteur casablanca
Si vous avez vraiment ne peut pas faire d'hypothèse sûre au sujet de la longueur d'une ligne, vous devez utiliser getline(). Cette fonction prend trois arguments: un pointeur vers une chaîne de caractères (char**), un pointeur vers un int tenue de la taille de cette chaîne et d'un pointeur de fichier et renvoie la longueur de la ligne de lecture. getline() alloue dynamiquement l'espace pour la chaîne (à l'aide de malloc /realloc) et donc vous n'avez pas besoin de connaître la longueur de la ligne et il n'y a pas de dépassements de mémoire tampon. Bien sûr, il n'est pas aussi pratique qu'fscanf, parce que vous avez à séparer la ligne manuellement.
Exemple:
OriginalL'auteur sl0815