語言是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」元素。 –