Je suis en train de lire un fichier en C++ en utilisant des flux, en particulier fstream, pas ifstream.Stockage de chaînes de taille variable dans des structures
blah blah blah\n
blah blah\n
blah blah blah blah \n
end
Cela se répète encore et avec
- nombre Varble de bla de dans chaque ligne,
- nombre constant de lignes entre chaque extrémité, à la fin est le délimiteur ici
I vouloir lire un ensemble de données, puis le stocker dans un tableau de caractères, dans une structure de style C. J'ai commencé en essayant d'utiliser getline() mais le délimiteur ne peut être qu'un caractère, pas trois. Je ne peux évidemment pas essayer de lire un nombre d'octets en utilisant simplement read(), car le nombre sera différent pour chaque ensemble.
Donc, je suis déchiré sur ce que la chose la plus facile (et la plus robuste) à faire ici est. Devrais-je appeler getline jusqu'à ce que je trouve une chaîne 'end', tout en ajoutant chaque chaîne encore et encore?
J'ai essayé un tableau de char 2D, mais je l'ai copié était une sorte de douleur. Puis-je utiliser strncpy ici? Je ne pense pas que cela a fonctionné
char buf[10][10];
strncpy(buf[1], "blah blah",10);
J'ai quelques idées, mais je ne suis pas sûr que l'un (ou celui que j'ai pas même si bien) est le meilleur.
EDIT: Donc, ceci est pour une application de mise en réseau, de sorte que la taille du tableau char (ou chaîne) doit toujours être la même. De plus, il ne devrait pas y avoir de pointeurs dans la structure.
Question connexe: est la façon dont un tableau char et une chaîne std :: string sont stockés dans la même mémoire? J'ai toujours pensé qu'il y avait un peu de surcharge avec std :: string.
Vous pouvez obtenir une chaîne de style C, un pointeur char, pour la lecture d'un std :: string uniquement, en utilisant la méthode c \ _str. La méthode de données fonctionne également, mais ne garantit pas la terminaison nulle. La manière dont la chaîne est exactement stockée en mémoire est un détail d'implémentation (certains font par exemple le comptage des références), mais de loin le plus répandu se résume à un tableau char. Il est toujours plus facile d'utiliser une chaîne std :: et de la laisser gérer le tableau, cependant. –