2016-08-08 3 views
-1

어제 나는 char 포인터의 배열의 경우에 C++에서 이상한 동작을 보았습니다. 여기 배열의 문자 포인터 초기화 이상 동작

코드의 예는 다음과 같습니다

int main() { 
    char *args[] = {(char *) std::to_string(12345).c_str(), (char *) std::to_string(12346).c_str()}; 
    printf("%s %s\n", args[0], args[1]); 

    return 0; 
} 

그리고 출력은 다음과 같습니다

12346 12346 

내가 대답은 "12345 12346"인 것을 가정한다. 어떤 도움이 필요합니까? 내 유일한 컴파일 플래그는 -std = C++ 11이고 g ++를 사용합니다.

답변

5

작성한 문자열은 임시 속성이므로 c_str에 대한 포인터를 작성한 다음이를 삭제합니다. 포인터의 내용은 쓸모 없게됩니다.

편집 : 수정 사항을 제안하는 Barmar에게 감사드립니다. 명명 된 표준이 : : 문자열 (중괄호의 가까이에 -}) 범위가 끝날 때까지 파괴되지 않습니다이 코드에서

int main() 
{ 
    std::string string1 = std::to_string(12345); 
    std::string string2 = std::to_string(12346); 

    const char *args[] = {string1.c_str(), string2.c_str()}; 
    printf("%s %s\n", args[0], args[1]); 
    return 0; 
} 

+0

은 또한 당신은 CONST를 버리지한다 on the char * c_str에서 반환 –

+1

가장 도움이 되려면 코드를 수정하는 방법을 보여 주어야합니다. – Barmar

+0

고마워요. 지금은 의미가 있습니다. – balexios