Post

(C++) \r이 포함된 문자열 출력할 때 이상하게 출력되는 현상

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <sstream>

using namespace std;

int main() {
    string item = "abc\r\ndef\nghi";    // contain \r
    istringstream stream(item);
    while (getline(stream, item)) {
        cout << item << item.length() << '\n';    // item << item.length() may be folded
    }
    return 0;
}

실행 결과

1
2
3
4
4bc
def3
ghi3

문자열에 \r이 포함되어 있는 경우, 이걸 파싱하면서 캐리지 리턴이 적용되어 커서가 맨 앞으로 가기 때문에 그 이후에 출력되는 데이터는 맨 앞에서부터 출력되어 이전에 출력된 데이터를 덮어 써버리는 결과를 가져온다. 그래서 \r이 포함된 문자열 파싱 및 출력은 주의해주어야 한다.

조금 더 간단한 예제는

1
2
3
4
5
int main() {
    std::string item = "abcdefg\r";
    std::cout << item << "1234" << '\n';
    return 0;
}
1
2
1234efg
This post is licensed under CC BY 4.0 by the author.