c - argv 中的字符串是否可以修改?

标签 c string command-line-arguments argv

我刚刚用 C 编写了一个读取命令行参数的小程序,没有什么太难的。我也在修改它们,例如将参数的第一个字符更改为大写。

我知道您不应该修改字符串文字,因为它会导致未定义的行为,所以我只是想知道 *argv[] 中的字符串是否是您不应该更改的文字。

int main(int argc, char *argv[])

最佳答案

来自 C11 标准草案 N1570,§5.1.2.2.1/2:

The parameters argc and argv and the strings pointed to by the argv array shall be modifiable by the program, and retain their last-stored values between program startup and program termination.

它们是可修改的。这意味着它们不是字符串文字。

但是要小心:上面的引用仅指指向字符串的指针,不包括argv[argc]1
来自C11标准草案N1570,§5.1.2.2.1/2(同上)1:

argv[argc] shall be a null pointer


注意事项:

  • 关于这句话的一些事情:

    I know that you shouldn't modify string literals as it can cause undefined behavior [...]

    “可以”?它总是。未定义的行为包括预期的、似乎定义明确的和意外的行为。


1 感谢@black!

关于c - argv 中的字符串是否可以修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35102922/

相关文章:

c - 在函数 C 中修改字符串

objective-c - Malloc 的字符串包含垃圾值

c++ - 未初始化的结构成员是否总是设置为零?

string - VBA在最后一个单词之后切割字符串总长度小于80个字符

java - 如何在命令提示符下运行 Java 程序

c++ - 命令行开关乱序

c - 如何在 LPC11CXX 系列微 Controller 上设置 PWM 输出而不需要任何定时器重置

javascript - 如何从路径(键数组)创建嵌套对象结构?

javascript - 如何将 jQuery/Javascript 函数显示到 <pre> (字符串)?

java - 如何测试接受命令行参数的并发 Java 程序?