C语言中多维数组如何用二进制文件方式存盘?
答案:5 悬赏:0 手机版
解决时间 2021-02-16 04:55
- 提问者网友:战魂
- 2021-02-15 21:19
C语言中多维数组如何用二进制文件方式存盘?
最佳答案
- 五星知识达人网友:鸽屿
- 2021-02-15 21:45
fwrite(go3ui2,3,16384*1878, pr); //这样可以
也可以是
fwrite(go3ui2,1,16384*1878*3, pr);
总之,只要写入的大小等于数组的大小就可以了
也可以是
fwrite(go3ui2,1,16384*1878*3, pr);
总之,只要写入的大小等于数组的大小就可以了
全部回答
- 1楼网友:几近狂妄
- 2021-02-16 01:50
写了一个粗糙的程序
下面是一个数字的三维数组,用三重循环进行写入存取
#include
#include
#define R 2
#define S 2
#define T 3
int main()
{
int arr[R][S][T];
int i, j,k;
FILE *fp;
if ((fp = fopen("s.dat", "wb+")) == NULL)
{
fprintf(stderr, "打开文件失败!");
exit(1);
}
for(i=0; i {
for (j=0; j {
for (k=0; k {
scanf("%d", arr[i][j]+k);
fwrite(arr[i][j]+k, sizeof(int), 1, fp);
}
}
}
rewind(fp);
for(i=0; i {
for (j=0; j {
for(k=0; k {
fread(arr[0][0]+0, sizeof(int), 1, fp);
printf(" %d ", arr[0][0][0]);
}
puts("");
}
}
return 0;
}
//----------------------
//可是对于三维数组:
char go3ui2[16384][1878][3];
//该怎么存盘呢?
pr=fopen("c:\\4.ck","wb");
fwrite(go3ui2,3,16384,1878, pr); //这样肯定不行吧?
fwrite(go3ui2,3,16384*1878, pr); //这样行吗?
//有其它方法吗?
//----------------------------------------------
三维字符型数组读取与写入
#include
#include
#define R 2
#define S 3
#define SIZE 20
int main()
{
char arr[R][S][SIZE];
int i, j;
FILE *fp;
if ((fp = fopen("s.dat", "wb+")) == NULL)
{
fprintf(stderr, "打开文件失败!");
exit(1);
}
for(i=0; i {
for (j=0; j {
fwrite(gets(arr[i][j]), SIZE, 1, fp);
}
}
rewind(fp);
for(i=0; i {
for (j=0; j {
fread(arr[i][j], sizeof(arr[i][j]), 1, fp);
puts(arr[i][j]);
}
}
return 0;
}
可以看出,对于三维的字符串数组,可以少做一个循环! 只要你愿意 四,五,六,更多维都可以!
//-------------------------------
不知道你用多维数组做什么程序,至于数据的存盘,完全可以用一维去做!
如果是学习数组的多维遍历,此小示例应该满足你的需求!
下面是一个数字的三维数组,用三重循环进行写入存取
#include
#include
#define R 2
#define S 2
#define T 3
int main()
{
int arr[R][S][T];
int i, j,k;
FILE *fp;
if ((fp = fopen("s.dat", "wb+")) == NULL)
{
fprintf(stderr, "打开文件失败!");
exit(1);
}
for(i=0; i
for (j=0; j
for (k=0; k
scanf("%d", arr[i][j]+k);
fwrite(arr[i][j]+k, sizeof(int), 1, fp);
}
}
}
rewind(fp);
for(i=0; i
for (j=0; j
for(k=0; k
fread(arr[0][0]+0, sizeof(int), 1, fp);
printf(" %d ", arr[0][0][0]);
}
puts("");
}
}
return 0;
}
//----------------------
//可是对于三维数组:
char go3ui2[16384][1878][3];
//该怎么存盘呢?
pr=fopen("c:\\4.ck","wb");
fwrite(go3ui2,3,16384,1878, pr); //这样肯定不行吧?
fwrite(go3ui2,3,16384*1878, pr); //这样行吗?
//有其它方法吗?
//----------------------------------------------
三维字符型数组读取与写入
#include
#include
#define R 2
#define S 3
#define SIZE 20
int main()
{
char arr[R][S][SIZE];
int i, j;
FILE *fp;
if ((fp = fopen("s.dat", "wb+")) == NULL)
{
fprintf(stderr, "打开文件失败!");
exit(1);
}
for(i=0; i
for (j=0; j
fwrite(gets(arr[i][j]), SIZE, 1, fp);
}
}
rewind(fp);
for(i=0; i
for (j=0; j
fread(arr[i][j], sizeof(arr[i][j]), 1, fp);
puts(arr[i][j]);
}
}
return 0;
}
可以看出,对于三维的字符串数组,可以少做一个循环! 只要你愿意 四,五,六,更多维都可以!
//-------------------------------
不知道你用多维数组做什么程序,至于数据的存盘,完全可以用一维去做!
如果是学习数组的多维遍历,此小示例应该满足你的需求!
- 2楼网友:怙棘
- 2021-02-16 00:35
long int numwritten;
numwritten = fwrite(go3ui2,sizeof(char),16384*1878*3, pr);
检查 写入个数numwritten 对不对.你的数据量较大.
numwritten = fwrite(go3ui2,sizeof(char),16384*1878*3, pr);
检查 写入个数numwritten 对不对.你的数据量较大.
- 3楼网友:山君与见山
- 2021-02-15 23:47
肯定不行啊。用sizeof判断大小,否则可能出问题。 读取的时候也一样,不要直接指定大小。
- 4楼网友:煞尾
- 2021-02-15 22:58
记得当年这么课我不及格!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯