c - 插入数组期间整数值发生变化

标签 c arrays netbeans

我的代码有一些奇怪的问题,我不知道我做错了什么。我是 C 语言的新手,所以如果有人能指出我是否在做一些愚蠢的事情,我将不胜感激。

我正在尝试将文件中的数据读入类型为state 的二维数组。类型状态定义如下:

typedef uint8_t state [4][4];

我定义了方法 read_block 获取文件指针作为参数并返回指针二维类型 state 数组,其中包含该文件的前 16 个字节。

state* read_block(FILE *fp) {
    state *arr = (state*) malloc(sizeof (state));
    uint8_t *temp = (uint8_t*) malloc(sizeof (uint8_t)*16);

    fread(temp, 16, 1, fp);

    /*
    for (int y = 0; y < 16; y++) {
        printf("%u ", temp[y]);
    }
    printf("\n");
    */

    int n = 0;
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            /*
            printf("%u ", temp[n]);
            */
            *arr[i][j] = temp[n];
            n++;
        }
    }

    return arr;
}

代码编译和运行正常,但是方法返回的类型state 数组总是包含一个错误的值。具体来说,位置[3][0]的值总是错误的。

我尝试读取的测试文件包含数字:

0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3

我决定检查这些值是否被正确读取,如果我删除围绕 printf 行的注释,我将得到输出:

0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 
0 1 2 3 0 1 2 3 0 1 2 3 3 1 2 3

其中第一行完全正确(在 fread() 之后打印),但由于某种原因第二行不正确(在将值插入 arr 时打印)。

我不知道是什么原因造成的。我也曾尝试使用 fread 一次读取一个字节的值,但相同的值一直是错误的。我正在使用 NetBeans,所以我不确定这是否是由它引起的。

最佳答案

您遇到了运算符优先级问题。

*arr[i][j]

相同
*(arr[i][j])   // or arr[i][j][0]

仅当 i == 0 时才相同,即在第一行。

你想要的是

(*arr)[i][j]

关于c - 插入数组期间整数值发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50504943/

相关文章:

windows - 如何让我的 SVN 存储库在双启动 PC 上的 Windows 和 ubuntu 上工作?

c - 使用c中的选择功能时无法正确打印

c++ - gcc 4.2 编译器 (Mac OSX) : fpu_control. h: 没有那个文件或目录的新手问题

c++ - 为什么这个结构是用字段中已有的数据初始化的?

javascript - 如何将javascript中的数组值相加,例如chartjs数据数组和输入值总和

php - 如何调整 PDO fetchAll() 以设置为匹配多表查询中的表名称而创建的数组的键?

c - 在 C 宏中,是否应该更喜欢 do { ... } while(0,0) 而不是 do { ... } while(0)?

c - malloc() 函数的返回

tomcat - 在不选择服务器的情况下在netbeans中创建一个web项目

java - NetBeans 的 GCJ