相关疑难解决方法(0)

argv [n]是否可写?

C11 5.1.2.2.1/2说:

数组指向的参数argcargv字符串argv应由程序修改,并在程序启动和程序终止之间保留它们最后存储的值.

我对此的解释是它指定:

int main(int argc, char **argv)
{
    if ( argv[0][0] )
        argv[0][0] = 'x';   // OK

    char *q;
    argv = &q;              // OK
}
Run Code Online (Sandbox Code Playgroud)

但它没有说什么:

int main(int argc, char **argv)
{
    char buf[20];
    argv[0] = buf;
}
Run Code Online (Sandbox Code Playgroud)

argv[0] = buf;允许的?

我可以看到(至少)两个可能的论点:

  • 上面的引用是故意提到的argv,argv[x][y]但不是argv[x],所以意图是它不可修改
  • argv是指向非const对象的指针,因此在没有相反的特定措辞的情况下,我们应该假设它们是可修改的对象.

c language-lawyer

32
推荐指数
2
解决办法
1102
查看次数

标签 统计

c ×1

language-lawyer ×1