在c中遍历字符串数组 #包括 int main(int argc,const char*argv[] { const char*s[]={a”,“b”,“c”,NULL}; 常量字符**p=s; while(*p!=NULL){ printf(“字符串=%s\n”,*p); (*p)++; } 返回0; }

在c中遍历字符串数组 #包括 int main(int argc,const char*argv[] { const char*s[]={a”,“b”,“c”,NULL}; 常量字符**p=s; while(*p!=NULL){ printf(“字符串=%s\n”,*p); (*p)++; } 返回0; },c,arrays,string,pointers,C,Arrays,String,Pointers,我想遍历字符串数组并打印字符串util,然后返回NULL sentinal。 但是,它会生成一条由信号终止的SIGSEGV(地址边界错误)消息。 谁能告诉我为什么 #include <stdio.h> int main(int argc, const char *argv[]) { const char *s[] = {"a", "b", "c", NULL}; const char **p = s; while (*p != NULL) {

我想遍历字符串数组并打印字符串util,然后返回NULL sentinal。 但是,它会生成一条由信号终止的SIGSEGV(地址边界错误)消息。 谁能告诉我为什么

#include <stdio.h>

int main(int argc, const char *argv[])
{
    const char *s[] = {"a", "b", "c", NULL};
    const char **p = s;
    while (*p != NULL) {
        printf("string = %s\n", *p);
        (*p)++;
    }
    return 0;
}
应该是:

(*p)++;
以下是您正在做的事情:

p++;
您增加了错误的指针。

使用这一行:

p --> * --> "a"
|     ^ incrementing this
checking this for null
您将递增
p[0]

我想这不是你想要的

替换为:

(*p)++

它应该工作得很好;)

while(*p)和(*p)++肯定是可疑的。可能是因为您在字符串末尾显式地输入了null值。字符串数组将自动包含null,您不必定义它。删除null并对循环使用length()方法。这可能会有帮助。@aradhna字符串数组将自动包含空值,您不必定义它,我不同意这一点。..OP会检查正确的值是否为
0
。错误的增量是这里唯一的问题。
p++;