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