昨天我遇到了一个奇怪的行为,如果出现了一系列的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 ++。
答案 0 :(得分: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 :: strings直到作用域结束时才会被销毁(在大括号结束时 - })