字符串数组.编译器错误.也许记忆超出界限



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

#include <stdio.h>
int main()
{
    char *argv[]= {"hello","world"};
    int num = 0;
    while (argv[num++] != NULL){
        printf("num value: %it  %cn",num,*argv[num-1]);
    }
    printf("Final num value: %in",num);
    return 0;
}

你超出了数组边界,因为

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

argv[num] NULL时将停止,但argv[]的维度是2,并且两个条目都是!= NULL的。

你可以写...

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

它应该按原样与您的最终条件一起工作。

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

5.1.2.2.1 程序启动

....

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

argv[argc] 应为空指针。

但是,如果您创建"自己的"本地argv[] -thing,则必须自己显式执行此操作。

相关内容

最新更新