字符串数组。编译器错误。也许记忆越界?

时间:2019-01-10 21:20:44

标签: c

我试图理解C语言中char指针数组的概念。 在这个基本示例中,我尝试使用x ++运算符获取字符串数,但是不幸的是,我遇到了编译器错误,因为也许我尝试访问额外的内存区域,但我应该这么做吗?感谢您的帮助。

#include <stdio.h>

int main()
{
    char *argv[]= {"hello","world"};
    int num = 0;

    while (argv[num++] != NULL){
        printf("num value: %i\t  %c\n",num,*argv[num-1]);
    }

    printf("Final num value: %i\n",num);

    return 0;
}

1 个答案:

答案 0 :(得分:6)

自此您超出数组界限

 while (argv[num++] != NULL)

argv[num]NULL时停止,而argv[]的尺寸为2,并且两个条目均为!= NULL

你可以写...

 char *argv[]= {"hello","world",NULL};

它应该按您的最终条件工作。

顺便说一句:您知道argv[]通常用作函数main的参数的名称,即int main(int argc, char* argv[]),它们代表程序被调用时的命令行参数。您?当您使用函数main-参数时,我认为它的最后一个有效元素将由NULL定义(例如,参见this在线C11标准草案): / p>

  

5.1.2.2.1程序启动

     

....

     

(2)如果已声明,则主函数的参数应   遵守以下约束:

     

argv [argc]应为空指针。

但是,如果您创建自己的本地argv[]东西,则必须自己明确地执行此操作。