我的代码有一些奇怪的问题,我不知道我做错了什么.我对C语言比较陌生,所以如果有人能指出我做的是愚蠢的话,我真的很感激.
我正在尝试将文件中的数据读入类型为状态的二维数组中.类型状态定义如下:
typedef uint8_t state [4][4];
Run Code Online (Sandbox Code Playgroud)
我已经定义了方法read_block,它将文件指针作为参数获取,并返回指针二维类型状态数组,该数组包含该文件的前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;
}
Run Code Online (Sandbox Code Playgroud)
代码编译并运行正常,但方法返回的类型状态数组始终包含一个错误的值.具体来说,位置[3] [0]中的值总是错误的.
我正在尝试阅读的测试文件包含数字:
0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
Run Code Online (Sandbox Code Playgroud)
我决定检查值是否正确读取,如果我删除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
Run Code Online (Sandbox Code Playgroud)
其中第一行完全正确(即在fread()之后打印),但由于某种原因,第二行不正确(在将值插入arr时打印).
我无法弄清楚造成这种情况的原因.我也尝试用fread一次读取一个字节的值,但是相同的值仍然是错误的.我正在使用NetBeans,所以我不确定这是否是由它引起的.
你遇到了运营商优先权.
*arr[i][j]
Run Code Online (Sandbox Code Playgroud)
是相同的
*(arr[i][j]) // or arr[i][j][0]
Run Code Online (Sandbox Code Playgroud)
只有i == 0在第一行中,这是相同的.
你想要的是什么
(*arr)[i][j]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |