c++ - 这个变量赋值有什么不同?

标签 c++ arrays string variables

以下代码尝试将字符串 c 的内容放入 arg[0]。

const char **argv = new const char* [paramlist.size() + 2];
argv[0] = c.c_str();

这是另一种方式。

argv[0] = "someprogram"

我注意到稍后在我的程序中,第二种方法有效,但第一种方法会导致错误。可能有什么不同?如何更改第一种方式使其正常工作?

这是问题发生的地方:

execvp(c.c_str(), (char **)argv);

如果我将其更改为以下内容,则不会出现该问题。这是为什么?

execvp(argv[0], (char **)argv);

最佳答案

在这两种方式中,你都保持 const char* argv[0] 中的指针.所以唯一关心的是指针是否有效并指向以零结尾的字符串。

“someprogram”指针在程序执行期间有效并指向以零结尾的字符串。

c.c_str()指针从返回(通过 std::basic_string::c_str() 函数)到字符串 c 的那一刻保证有效被更改或销毁。因此,如果您访问字符串 c显式或隐式地使用任何非常量函数(包括其析构函数)存储到 argv[0] 中的指针很可能会失效。

添加:

显然要制作argv[0] = c.c_str();变体工作正常,你必须使用 argv仅在std::string c范围内(其中 c 存在)并且不要更改 c在您进行此分配后以任何方式 ( argv[0] = c.c_str(); )。

关于c++ - 这个变量赋值有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5800761/

相关文章:

c++ - AWS Lambda C++ SDK "Process exited before completing request"

c# - Array.Sum() 导致溢出

java - 如何随机组合 2 个数组的元素,同时确保在所有元素至少使用一次之前不会重复使用某个元素?

python:SyntaxError:EOL,同时扫描字符串文字

string - SAS - 根据表中另一个变量值反转变量值的顺序

c++ - 不需要删除动态数据?

c++ - GCC 包含 header (使用 `-include` )CMake 未检测到的更改

c++ - 对`vtable 的 undefined reference

java - 从文件流式传输 n 个整数列表以创建 n 个对象数组

c# - 查看字符串中的每个字符