语言是C.我有一个char *类型(char * array []/char **数组)作为函数参数的数组,我想将它们全部打印成如下所示的单独行:printf在打印成功后崩溃
while (*array) {
printf("%s\n", *array);
printf("after last print");
array++;
}
现在出于某种原因,使用某个输入,它管理打印所有的值,但在打印最后一个*数组后立即崩溃。因此在最后一次printf之后,它不再打印“最后一次打印后”。不幸的是,我在Windows 7上使用netbeans C支持,没有gdb。当我尝试将其安装到netbeans时出现了一些问题,但这是另一回事。
首先,有什么可能导致这种情况?其次,我怎么能没有gdb尝试调试这种行为最好?如果一个人提供了一个答案,帮助我调试问题并以这种方式解决问题,那么我也会单独给予答案。与导致崩溃的函数参数相关的一些背景信息:我使用strtok从char *字符串中生成char ** arr,其中空格用作分隔符。
编辑:
一些更多的信息:如果我同样的函数内尽量给printf的最后一个*阵列,它工作正常,程序继续正常进行。所以这个工作原理:
printf("%s\n", array[4]);
在我的测试用例中NULL前面的最后一个索引恰好是4。但是当同样的事情在前面看到的循环内部完成时,它确实能够打印它,但是之后立即崩溃,而不是再打印第二行。
很可能最后一个数组元素没有用NULL指针设置。你需要像'array [n] = NULL;',其中'n'是字符串的数量。当然,“阵列”需要一个空间来容纳“n + 1”元素。 –