Char指针数组初始化的奇怪行为

Array Of Char Pointers initialization strange behaviour

本文关键字:指针 数组 初始化 Char      更新时间:2023-10-16

昨天我在c++中遇到了一个奇怪的行为,对于char指针数组。

下面是代码示例:
int main() {
    char *args[] = {(char *) std::to_string(12345).c_str(), (char *) std::to_string(12346).c_str()};
    printf("%s %sn", args[0], args[1]);
    return 0;
}

输出为:

12346 12346 

我想答案应该是"12345 12346"。任何帮助吗?我唯一的编译标志是-std=c++11,我使用的是g++。

您创建的这些字符串是临时的,您创建了指向它们的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 %sn", args[0], args[1]);
  return 0;
}

在这段代码中,命名的std::字符串直到作用域结束(在花括号-}的末尾)才会被销毁