【发布时间】:2015-01-04 05:06:20
【问题描述】:
我正在尝试从我刚刚创建的 long 数组中获取数据,但我得到了不同的数据。
请看下面的代码:
#include <string.h>
#include "readfile.h"
int main()
{
long wr_data [6] ;
wr_data[0] = 11;
wr_data[1] = 1100;
wr_data[2] = 1122323;
wr_data[3] = 11333;
wr_data[4] = 11434243;
wr_data[5] = 1166587;
writeFile(wr_data);
readFile();
return(0);
}
int readFile()
{
FILE *file;
long * data
printf("Error Reading File\n");;
/* Open file for both reading and writing */
file = fopen(fileName, "r");
if (file == NULL)
{
printf("Error Reading File\n");
return -1;
}
for (int i = 0; i < 5; i++)
{
fscanf(file, "%ld", &data[i] );
printf("data[%d]: %ld \n",i, data[i]);
}
fclose(file);
return 0;
}
int writeFile(long * data)
{
FILE *fp;
if (data != NULL)
{
if ((fp = fopen(fileName,"w")) == NULL)
return -1;
if (*data !=0 )
fwrite(data,sizeof(long),6,fp);
printf("Write data\n");
fclose(fp);
}
return 0;
}
我得到的结果如下:
- 写入数据
- 数据[0]:140526045102081
- 数据[1]:47
- 数据[2]:197764
- 数据[3]:140526045102080
- 数据[4]: 4096
我想保留 write 函数,因为它来自现有代码。我也尝试了函数 fread 但没有成功
fread(data, sizeof(long ), 6, file);
提前感谢您的帮助。
【问题讨论】:
-
什么操作系统?该代码是不可移植的。
-
long *data; -
@Jasen:对我来说,UB 似乎相当便携。
-
@PeterSchneider 二进制数据文件应以“wb”而不是“w”模式打开
-
不确定为什么有人要运行非 posix 系统,但手册页说“模式字符串还可以包含字母 'b' 作为最后一个字符或作为上面描述的任何两个字符串中的字符。这严格是为了与 C89 兼容并且没有任何影响;在所有符合 POSIX 的系统(包括 Linux)上都会忽略“b”。(其他系统可能会以不同的方式处理文本文件和二进制文件, 如果您对二进制文件执行 I/O 并希望您的程序可以移植到非 UNIX 环境,则添加 'b' 可能是个好主意。)"
标签: c fopen readfile fread scanf