为什么不能用fwrite
时间: 2023-07-12 19:43:31 浏览: 50
`fwrite`是将内存中的数据按照指定的字节大小和个数直接写入文件中,而不会对数据进行任何格式化处理。因此,如果使用`fwrite`写入整数数组,需要注意以下几点:
1. `fwrite`函数的第一个参数是一个指针,需要传入数组的地址。由于数组名在C语言中已经隐式转换为指向数组首元素的指针,因此可以将数组名直接传给`fwrite`函数。
2. `fwrite`函数的第二个参数是要写入的字节数,需要根据数据类型和数组大小计算得到。对于一个`int`类型的二维数组`a[3][4]`,需要写入的字节数为`3 * 4 * sizeof(int)`。
3. `fwrite`函数的第三个参数是要写入的数据个数,需要根据要写入的字节数和每个数据的字节数计算得到。对于一个`int`类型的二维数组`a[3][4]`,每个数据的字节数为`sizeof(int)`,所以需要写入的数据个数为`3 * 4`。
4. `fwrite`函数每次只能写入一个一维数组,不能直接写入二维数组。如果要写入一个二维数组,需要使用循环逐行写入。
因此,使用`fwrite`函数写入整数矩阵的代码如下:
```
#include <stdio.h>
int main() {
int a[3][4];
int i, j;
// 读入矩阵
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
scanf("%d", &a[i][j]);
}
}
// 转置矩阵
int b[4][3];
for (i = 0; i < 4; i++) {
for (j = 0; j < 3; j++) {
b[i][j] = a[j][i];
}
}
// 写入文件
FILE *fp = fopen("out.txt", "wb");
for (i = 0; i < 4; i++) {
fwrite(b[i], sizeof(int), 3, fp);
}
fclose(fp);
return 0;
}
```
需要注意的是,写入文件时需要以二进制模式打开文件,即`"wb"`。