2014-11-14 2 views
1

Я следующий пример кода,станд :: строка опустошает при печати новой строки

std::string comment; 
for(int i = 0; i<10; i++){ 
    char buff[500]; 
    sprintf_s(buff, "%i %e ", intv, dbl); 
    comment.append(buff); 

    comment.append("random"); 
    comment =+ '\n'; //c1 

    //comment.append("random2"); //c2 
} 

cout << comment; 

теперь, если я запускаю этот код ничего не отображается в окне вывода, но если я комментирую c1, то выход отображается. И если я раскомментирую c1 и c2, то будет отображаться только текст «random2» (это печатается только один раз),

Теперь моя проблема заключается в том, как добавить новую строку в мой код, не нарушая ее. Из-за проблем с производительностью я не могу использовать osstream.

Спасибо.

+1

Нет оператора '= +' –

+1

Интересно, почему это было проголосовано «вне темы». –

+0

Возможно, избиратель считал, что это просто опечатка и поэтому слишком очевидна. Я не согласен: этот вопрос имеет глубину и хорошо сформулирован. Собственно, только что дал +1. – Bathsheba

ответ

2

=+ не является оператором append, а назначается операндом с унарным плюсом.

Вы можете изменить это на +=, что является оператором добавления строки.

5
comment =+ '\n'; 

Это действительно

comment = +'\n'; 

Унарный + практически не-оп (кроме операнда может быть преобразован из char в int), но действующий оператор. Это означает, что вы просто назначаете char или int на std::string, установив comment на «\ n».

Используйте operator+= вместо этого, чтобы вернуться на std::string.

+2

+1, но, строго говоря, '+ '\ n'' * способствует *' \ n 'типу' int', поэтому он не является no-op. – Bathsheba

+0

@ Bathsheba Да, когда я пытаюсь скомпилировать код OP, из-за этого он дает ошибку: неверное преобразование из 'int' в 'const char *' '. Как он его собрал? –

+0

Циник во мне подозревает надуманный вопрос. Он * бы * скомпилировал бы, если 'comment' был' std :: basic_string ', но с момента редактирования мы знаем тип. – Bathsheba

Смежные вопросы