字符串数组.编译错误.也许记忆不受限制?

pip*_*ghi 1 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;
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ner 6

从那以后,你超越了数组范围

 while (argv[num++] != NULL)
Run Code Online (Sandbox Code Playgroud)

当将停止argv[num]NULL,但argv[]的尺寸2,并且两个条目!= NULL.

你可以写......

 char *argv[]= {"hello","world",NULL};
Run Code Online (Sandbox Code Playgroud)

它应该与你的最终条件一起工作.

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

5.1.2.2.1程序启动

....

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

argv [argc]应为空指针.

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

  • @Shawn明确在C标准中,第5.1.2.2.1节(*程序启动*): - argv [argc]应为空指针. (4认同)