본문 바로가기

언어/C++

[C++] printf (string 사용) 주의

#include <iostream>
#include <string>

using namespace std;
int main() {
	int input;
	int result = 1;
	int output[10] = { 0 };

	for (int i = 0; i < 3; i++) {
		cin >> input;
		result *= input;
	}
	
	// printf("result >> %d\n", result);
	string str = to_string(result);

	// printf("%s\n", str); // printf 함수는 c 언어 출력 함수로 c++의 std::string 타입을 처리할 수 없음, %s 지정자는 c스타일 문자열(null로 종료되는 'char' 배열)을 생각하고 있음
		// 따라서 string 객체를 %s로 출력하려고 하면 메모리 주소를 문자열로 잘못 해석해서 이상한 결과를 출력하게 됨.

	// printf("%s\n", str.c_str()); // c_str() 메서드 사용

	// cout << str.length() << endl;
	
	for (int i = 0; i < str.length(); i++) {
		int index = str[i] - '0';
		// cout << index << endl;
		output[index]++;
	}
	//printf("\n");

	for (int i = 0; i < 10; i++) {
		cout << output[i] << endl;
	}

	return 0;
}