J'ai un vecteur de chaînes en C++, nommé lines
.Cout commence à imprimer au début de la ligne quand on lui donne une chaîne
Cette ligne
std::cout << "First line: >" << lines[0] << "<" << std::endl;
impression "> ligne IRST:> string_here" au lieu de "Première ligne:> string_here <".
Pourquoi cout lance-t-il l'impression au début de la ligne en cours après la chaîne, et comment puis-je la résoudre? J'ai aussi essayé de tirer après chaque cout, mais le résultat était le même.
Ceci est un code complet qui ilustrates mon problème, avant d'être résolu:
#include <iostream>
#include <vector>
#include <string.h>
std::vector<std::string> parse(char *buffer, const char *delimiter) {
std::string buff(buffer);
size_t pos = 0;
std::string part;
std::vector<std::string> parts;
while ((pos = buff.find(delimiter)) != std::string::npos) {
part = buff.substr(0, pos);
parts.push_back(part);
buff.erase(0, pos + 1);
}
parts.push_back(buff);
return parts;
}
int main() {
char *s;
s = strdup("Many lines\r\nOf text");
std::cout << s << std::endl; // this should print the string how it is
std::vector<std::string> lines;
lines = parse(s, "\n"); // parsing the string, after "\n" delimiter
// that was the problem, I should have parsed after "\r\n"
std::cout << "First line: >"<< lines[0] << "<" << std::endl; // output
}
Qu'avez-vous dans les lignes [0]? – sithereal
Pouvez-vous le reproduire ailleurs? Cela semble spécifique au système. – luk32
c'est une autre chose étrange, dans les lignes [0] il y a une chaîne de 31 caractères exactement, mais quand j'imprime sa longueur, il dit 32. J'ai vérifié, et le dernier n'est pas endline, juste null. –