#include <stdio.h>
int main()
{
int n=0;
int a[n], i;
int multi_array[n][3];
FILE *point = fopen("example.txt", "r");
fscanf(point,"%d" , &n);
printf("This is n: %d " , n);
for(i = 0; i < n; i++)
{
fscanf( point , "%d," , &multi_array[n][3]);
}
for(i = 0; i < n; i++)
{
printf("%d\n" , multi_array[n][3]);
}
}
“example.txt”文件的代码如下:
3
1,10,0
2,1,2
3,2,6
第一个数字决定数组的数量(n),最后三行数字将被存储到这些数组中,例如:1,10,0应该存储在第一个数组中,2,1,2应该存储在第二个数组中,依此类推。
我的上面的代码给了我一个段错误错误。
最佳答案
由于您事先不知道数组将需要多少行,因此您无法在堆栈上声明它(即 int a[n]
和 int multi_array[n][3]
不起作用)。当您更改 n 的值时,C 不会为您调整数组的大小;您已将它们声明为大小 0 并且它们保持这种状态,这就是为什么当您尝试取消引用它们时会得到 SEGV。
如果您切换到 calloc() 并声明为 int *multi_array[3]
,事情应该会更好。
您的 printf() 和 fscanf() 中也有一个错误,因为您只取消引用数组中的最后一个元素,而不是全部三个元素。您还有一个错误,因为您实际上取消了对超出末尾的元素的引用,因为 3 个元素的数组具有元素 [0]、[1] 和 [2]。
关于无法让多数组在 c 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46327920/