无法让多数组在 c 中工作

标签 c

#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/

相关文章:

c - 打印最后 -n 行输入

c - 在#if 和#elif 的表达式中,什么是名称的 "defined"前缀,以及标识符(包括 C 关键字)被替换为 0 的内容?

C结构字符串读取错误

c - 在 C 和 Windows 中 Hook

c++ - 为什么我的 C++ 代码比 C 代码慢得多

c - 最大行长度程序在 c 中打印不可读的字符

c - 结构 C 内的动态可变长度

c - 在数组表示和除数中查找数字的模数

在内存中将 BMP 文件转换为 PNG 文件

c - 管道到系统()?