【发布时间】:2016-01-30 19:13:26
【问题描述】:
最近(2016 年 1 月,如果问题持续时间足够长的话)我们遇到了问题Are the strings in argv modifiable?。
在this 答案的评论部分,我们(@2501 和我)争论到底是字符串(示例字符是**argv)是可修改的还是指针到字符串(示例指针为*argv)。
相应的标准引用来自 C11 标准草案 N1570,§5.1.2.2.1/2:
参数
argc和argv以及指向的字符串argv数组应可由程序修改,并保留其 程序启动和程序终止之间的最后存储值。
那么指向argv 指向的字符串的指针是否可以修改?
【问题讨论】:
-
@nsilent22 正如我在引用的问题中已经说过的,在 C 中,您也可以执行
char* str = "foo";和*str = 'c';是未定义的行为。所以我会把const留在这里。 -
@SimonShine:
argv是一个局部变量,所以无论如何它都是可以修改的。但问题是关于*argv和其他指针。 -
虽然问题本身很好,但我个人认为改变论点和
*argv是不好的风格。它可能对独立环境有用,但标准并未定义启动行为/功能,因此无论如何它取决于您的实现和环境。 -
@Olaf 好吧,几乎所有的挑剔问题和关于标准的问题都来自糟糕的风格和极端情况,不是吗?标准不是在托管实现上定义
int main(void)和int main(int, char**)吗?
标签: c pointers language-lawyer argv