3

当我尝试循环执行以下 C 程序时,出现错误:“分段错误:11”

#include <stdio.h>

main() {

int i;

char *a[] = {
    "hello",
    "how are you",
    "what is your name"
};

for (i = 0; a[i][0] != '\0'; i++ ) {
    printf("\n%s", a[i]);
}
}

但是当我用以下内容替换for循环中的测试时,我没有收到错误并且一切正常。

    for (i = 0; i < 3; i++ ) {
    printf("\n%s", a[i]);
}

如果有人可以向我解释为什么测试a[i][0] != '\0'不起作用,以及我应该做什么,我将非常感激。

4

1 回答 1

8

您需要缺少一个终止字符串。你的定义a应该是

char *a[] = {
        "hello",
        "how are you",
        "what is your name",
        ""
    };

如果没有空字符串,您将访问a[3]不存在的字符串,因此会出现段错误。

于 2013-06-23T23:29:13.307 回答