while循环中字符串数组末尾的分段错误

时间:2017-12-04 10:43:15

标签: c arrays while-loop segmentation-fault

这是我的代码的一部分

char **images; // An array of strings filled with valid data

while(*images)
{
    printf("input image = %s\n", *images);
    images++;
}

我希望它在到达数组末尾时退出循环,但它仍然进入循环并崩溃。请建议如何解决此问题。数组中的元素数量不固定。

1 个答案:

答案 0 :(得分:1)

代码不知道如何停止,因为while循环始终为true,即不为零。即使您将数组的末尾运行到未标记的地址空间,代码仍会继续,然后按照您的建议进行段错误。

您应该始终使用诸如“\ 0”之类的标记来关闭字符串数据,并在while循环中执行检查,即:

while ( strcmp(*images, "\0") != 0 )

或者您应该知道**图像数组的大小并在阅读完最后一项后停止。因此,最好使用for循环而不是while循环。上面的strcmp版本效率低得多。 for循环应该非常有效。