1. 程式人生 > >C 語言的一個錯誤,沒找出原因

C 語言的一個錯誤,沒找出原因

amp n) string getc bsp can 什麽 數據 能夠

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int
main(void)
{
char str[512];
char *endpstr;
int N;
struct struct_num {
int highs[N];
int violate[N];
};

struct struct_num num;
/* 獲取N */
scanf("%d", &N);
getchar();

/* 獲取身高數據 */
fgets(str, 512, stdin);

endpstr = str;
int cur = 0
/* while (endpstr) { */
/* num.highs[i++] = strtol(endpstr, &endpstr, 10); */
/* printf("%d\n", strtol(endpstr, &endpstr, 10)); */
;
/* } */

return 0;
}

這段代碼是可以編譯通過的,但是,只要我把512, 換成1024,1022,都會得到

Segmentation fault (core dumped)

沒有任何要求我輸入,直接顯示錯誤哦


如果換乘

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int
main(void)
{
char str[1024];
char *endpstr;
int N;
struct struct_num {
int highs[N];
int violate[N];
};
int cur;
struct struct_num num;
/* 獲取N */
scanf("%d", &N);
getchar();

/* 獲取身高數據 */
fgets(str, 1024, stdin);

endpstr = str;
cur = 0;
while (endpstr) {
/* num.highs[i++] = strtol(endpstr, &endpstr, 10); */
printf("%d\n", strtol(endpstr, &endpstr, 10));
/* ; */
}

return 0;
}

會顯示的錯誤是:

Bus error (core dumped)

如果換成512,也會能夠編譯通過。這是為什麽?

C 語言的一個錯誤,沒找出原因