c - 在C函数中传递二维数组

标签 c arrays

我试图从一个函数返回一个二维数组,但是出了点问题。主函数上的 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/

相关文章:

c - 套接字数据在 TCP/IP 传输期间损坏

javascript - 在 PHP 中以数组形式访问无序列表 id 的最简单方法

ruby - 如何输出数组中元素的索引,这些元素也在另一个数组中?

c++ - BITMAPINFO 结构的 bmiColors 字段

c++ - 指向静态变量的指针和指向某个变量的静态指针之间的区别

c - 二进制到十进制转换 C 代码 - 满足特定测试用例的问题

ios - 为什么字符串添加需要这么长时间来构建?

javascript - 在 Javascript (jQuery) 中将数组插入数组

c - 在为 Excel 重写 CSV 存档时使用 strtok

C:不兼容的指针类型初始化