2017-05-18 3 views
0

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 
} 
+1

Qu'avez-vous dans les lignes [0]? – sithereal

+0

Pouvez-vous le reproduire ailleurs? Cela semble spécifique au système. – luk32

+0

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. –

Répondre

1

Il est impossible d'être sûr sans le contenu complet de lines[0], mais mon (instruit) guess serait que lines[0] se termine par \r, le caractère retour chariot, donc tout imprimé après lines[0] est imprimé au début de la ligne.

+0

Oui, c'était le problème. J'essayais d'obtenir les lignes une par une, à partir d'une chaîne avec beaucoup, et j'étais en train d'analyser après "\ n", quand le délimiteur est en fait "\ r \ n". Je vais fournir un code complet pour montrer le problème entièrement –

+0

@VladIordache même s'il y a '\ r' ou quelque chose, je ne pense pas que vous pouvez avoir deux'> 'en sortie. –

+0

le premier> était <, désolé –