Post

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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
5
4bc
def3
ghi3

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

조금 더 간단한 예제는

1
2
3
4
5
6
int main() {
std::string item = "abcdefg\r";
std::cout << item << "1234" << '\n';
return 0;
}

1
2
3
1234efg

This post is licensed under CC BY 4.0 by the author.