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

时间:2016-08-08 19:51:52

标签: c++ arrays

昨天我遇到了一个奇怪的行为,如果出现了一系列的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 ++。

1 个答案:

答案 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直到作用域结束时才会被销毁(在大括号结束时 - })