2016-08-08 57 views
-1

昨天我遇到了一個奇怪的行爲,在C++中的一個char指針數組的情況下。數組的char指針初始化奇怪的行爲

下面是代碼示例:

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; 
} 

在這段代碼命名的std ::字符串不會被破壞,直到範圍結束(在大括號結束 - })

+0

此外,你不應該拋棄的常量在char *從c_str返回 –

+1

爲了最有幫助,您應該展示如何更正代碼。 – Barmar

+0

非常感謝你們。現在有道理。 – balexios