我正在寫一個小型c程序來練習malloc
和sscanf
庫函數。但不幸的是,我得到了分段錯誤錯誤。我用Google搜索了幾個小時,但沒有結果。任何人都可以把我帶出來嗎?在這個微小的c程序中導致分段錯誤的原因是什麼?
#include <stdio.h>
#include <stdlib.h>
void print_array(int a[], int num_elements);
int main(void) {
int m;
printf("How many numbers do you count: \n");
scanf("%d", &m);
int *a = (int*)malloc(m * sizeof(int*));
char buf[100];
setbuf(stdin, NULL);
if (fgets(buf, sizeof buf, stdin) != NULL) {
char *p = buf;
int n, index;
while (sscanf(p, "%d %n", &a[index], &n) == 1 && index < m) {
// do something with array[i]
index++; // Increment after success @BLUEPIXY
p += n;
}
if (*p != '\0')
printf("you are giving non-numbers, will be ignored");
}
print_array(a, m);
free(a);
return 0;
}
void print_array(int a[], int num_elements) {
int i;
for (i = 0; i < num_elements; i++) {
printf("%d ", a[i]);
}
}
'INT * A =(INT *)malloc的(M *的sizeof(INT *));'您正在分配的陣列用於'大小m'指針,而不是'm'' int's。 – BoBTFish
'int n,index;' - >'int n,index = 0;' – BLUEPIXY
'sscanf(p,「%d%n」,&a [index],&n)== 1 && index < m' -->'index
BLUEPIXY