std::string이 std 네임스페이스의 구성원임에도 불구하고 이를 printf와 함께 사용하려고 하면 예상치 못한 결과가 발생합니다. 다음 코드 조각에서 볼 수 있듯이 동작:
#include <iostream> #include <string> int main() { using namespace std; string myString = "Press ENTER to quit program!"; cout << "Come up and C++ me some time." << endl; printf("Follow this command: %s", myString); cin.get(); return 0; }
이 문제는 printf가 아니기 때문에 발생합니다. 유형이 안전하며 C 스타일 문자열을 사용합니다. 이 문제를 해결하기 위해 사용할 수 있는 몇 가지 접근 방식이 있습니다.
std::string은 연산자 오버로딩을 지원하므로 std::cout:
std::cout << "Follow this command: " << myString;C 스타일 문자열 추출C 스타일 문자열 추출이 필요한 경우 c_str() 메서드를 사용하여 null로 끝나는 const char *를 얻을 수 있습니다. 구현 예는 https://stackoverflow.com/a/15014001에서 찾을 수 있습니다. Boost는 Boost::format과 유사한 기능을 제공합니다.
printf("Follow this command: %s", myString.c_str());C 23 업데이트
C 23은 두 접근 방식의 장점을 결합한 std::print를 도입하여 다음을 허용합니다. std::format:
을 사용한 유형 안전 출력
위 내용은 `printf`로 인해 `std::string`에서 예기치 않은 동작이 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!