ash*_*HUP 26 c string argv command-line-arguments
我刚写了一个小程序,用C语言读取命令行参数,没什么太难的.我也在修改它们,例如将参数的第一个字符更改为大写.
我知道你不应该修改字符串文字,因为它可能导致未定义的行为,所以只是想知道*argv[]你不应该改变文字中的字符串.
int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)
cad*_*luk 26
根据C11标准草案N1570,§5.1.2.2.1/ 2:
数组指向的参数
argc和argv字符串argv应由程序修改,并在程序启动和程序终止之间保留它们最后存储的值.
它们是可以修改的.这意味着它们不是字符串文字.
但要小心:上面引用只引用指向字符串的指针,不包括argv[argc]1处的强制空指针.
根据C11标准草案N1570,§5.1.2.2.1/ 2(与上述相同)1:
argv[argc]应为空指针
笔记:
关于这句话的事情:
我知道你不应该修改字符串文字,因为它可能导致未定义的行为[...]
"能够"?它总是如此.未定义的行为包括预期的,好像定义明确的和意外的行为.
1感谢@black!