2016-08-08 55 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