加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – argv = NULL是什么意思?

发布时间:2020-12-16 06:46:22 所属栏目:百科 来源:网络整理
导读:我试图让参数信息不可修改. #include stdio.h#include stdlib.hint 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 '*
我试图让参数信息不可修改.

#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

编译器使沉默.

该声明实际上做了什么?
我怎样才能禁止我的代码呢?

解决方法

由于这个答案已被固定在顶部,我觉得我应该指出我的答案只涉及部分问题.请参阅 Felix Palmen’s answer,了解为何不以这种方式声明main.

如果使用数组类型声明参数,则使用指针类型隐式替换该类型:

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

int main(const int argc,const char* const *argv) {

所以argv是指向const char的const指针的非const指针.

argv = NULL只是将该指针设置为空指针,就像为任何其他指针指定NULL一样.这不会有任何直接可见的外部效果 – 它不会删除您的命令行或任何东西 – 但它会干扰您在程序中使用参数信息的进一步尝试.

如果你想让argv本身成为const,请将它声明为const:

int main(const int argc,const char * const * const argv) {

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读