我正在尝试使参数信息不可修改。
#include <stdio.h>
#include <stdlib.h>
int main(const int argc, const char* const argv[]) {
//argc = 1; // error: assignment of read-only parameter 'argc'
//argv[0] = "argv"; // error: assignment of read-only location '*argv'
//argv[0][0] = 'a'; // error: assignment of read-only location '**argv'
return EXIT_SUCCESS;
}
现在当我这样做时,
argv = NULL; // no compile-time error
编译器保持沉默。
这个语句实际上是做什么的? 我如何禁止我的代码做这件事?
argv
从命令行传递到您的应用程序中的,而argc
表示传递的数量。您不必采取任何措施使它们不可修改,除非停止编写试图修改它们的代码。也就是说,如果停止编写像argv =
这样的代码,就不会有任何问题。 - Ken Whiteint main(void)
和int main(int argc, char *argv[])
。int main(int argc, char **argv)
由于类型调整规则而完全等效,因此也可以接受,但如果你开始添加const
,那么这就是一个不同的签名。C语言的实现可以支持他们自己定义的其他形式的main函数,但你的程序将不再符合标准C,另一个编译器可能会拒绝它。 - user2371524