我试图从一个函数返回一个二维数组,但是出了点问题。主函数上的 arr2
出现错误,
CXX0030: Error: expression cannot be evaluated
代码
int** file2array(char* filename) {
FILE *fp = NULL;
char c;
int i = 0;
int arr[9][9];
if ((fp = fopen(filename, "r")) == NULL)
{
printf("File could not be opened\n");
}
else
{
while (!feof(fp))
{
c = fgetc(fp);
if (c == '.') {
arr[i/9][i%9] = 0;
i++;
}
if (c>= '1' && c<='9') {
arr[i/9][i%9] = c - 48;
i++;
}
}
fclose (fp);
}
return arr;
}
int main(){
int** arr2 = file2array("SolverInput.txt");
}
最佳答案
二维数组 int arr[9][9]
和指向指针 int **arr
的指针不可互换,使用指向数组的指针 整数 (*arr2)[9]
:
void *file2array(char* filename){
...
int arr[9][9];
...
return arr;
}
int (*arr2)[9] = file2array("SolverInput.txt");
但是注意 arr
是一个局部变量(他的生命周期结束于函数),使用 malloc
:
void *file2array(char* filename){
...
int (*arr)[9] = malloc(sizeof *arr * 9);
...
return arr;
}
int (*arr2)[9] = file2array("SolverInput.txt");
...
free(arr2);
如果您事先不知道元素的数量(一个任意数字而不是 9),您可以使用可变长度数组 (VLA)
void *file2array(char* filename, int dim){
...
int (*arr)[dim] = malloc(sizeof *arr * dim);
...
return arr;
}
int dim = 9;
int (*arr2)[dim] = file2array("SolverInput.txt", dim);
...
free(arr2);
此外,fgetc()
返回一个 int
(不是 char
)
改变
char c;
到
int c;
关于c - 在C函数中传递二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40561249/