我正在學習C,我不知道該如何描述,但爲什麼在下面的代碼中取消註釋行11會打破此程序?爲什麼這項任務會破壞我的計劃?
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("argc: %d\n", argc);
char *states[] = {};
int i = 0;
while(i < argc) {
printf("arg %d: %s\n", i, argv[i]);
//states[i] = "test";
i++;
}
return 0;
}
當我取消註釋該行並運行該程序,我得到這樣的:
[email protected]:~/code$ ./myprog aaa bbb ccc
argc: 4
arg 0: ./lc
arg 1: aaa
爲什麼states[i] = "test";
打破while
循環?當我註釋它時,我看到所有打印的參數。
好吧,其中一個'州'大小爲零。你應該給它一個尺寸。也許'char * states [argc];',如果你允許VLA。 – Ryan
C不允許長度爲0的數組,也不允許初始值設爲空。也許這些是你的編譯器允許的擴展(不是一個好主意),但很可能你沒有足夠高的警告級別。 –