C 语言的一个错误,没找出原因
#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,也会能够编译通过。这是为什么?