ANSI C我对fwrite和fread做错了什么?

时间:2015-05-06 21:47:51

标签: c printf fwrite fread

我有以下代码,我尝试在第一次执行时将一些数据写入文件,然后在第二次执行时读取文件并将数据打印到屏幕上。

在第一次执行时,它将数据完全按照代码(</DIV>)写入屏幕,并按预期创建文件。

问题是当我读回文件并将我读过的内容写到屏幕上时,它只是我在任何文本编辑器中看到的文件的简单内容,而不是原始数据。我不知道我做错了什么。

我很确定第67行有问题,这与我将它打印到屏幕上的方式有关,但我对C很新,并且不习惯于处理数据格式。

test_data

更新我期待看到以下内容: 在第一次执行 #include <stdio.h> #include <stdint.h> #include <stdlib.h> int main () { FILE * pdataFile = NULL; const char * datafilename = "data.bin"; const char * _WRITE = "wb"; const char * _READ = "rb"; uint8_t data[32]; int idx; unsigned long dataFileLen; char dataBuffer; char test_data[] = "ahFlup1r2PWO1zySK9SBcPIQC5DcCw1mq7JrObea8lDWH&FcLbi7EzBu7ow56KbJ"; char * pos = test_data; pdataFile = fopen(datafilename, _READ); if (pdataFile == NULL) { printf("No existing file named: %s .\n", datafilename); /******** Print Contents of data Array ********/ printf("Random data: "); for (idx = 0; idx < 32; ++idx) { sscanf(pos, "%2hhx", &data[idx]); pos += 2 * sizeof(char); printf("%02x", data[idx]); }; printf("\n"); // new line /******** Save data to File ********/ pdataFile = fopen(datafilename, _WRITE); if (pdataFile == NULL) { printf("Error opening file %s for writing. End Program\n", datafilename); } else { fwrite (test_data, sizeof(char), sizeof(test_data), pdataFile); if (ferror (pdataFile)) printf("Error writing file %s.", datafilename); fclose (pdataFile); }; } else { fseek(pdataFile, 0, SEEK_END); dataFileLen = ftell(pdataFile); fseek(pdataFile, 0, SEEK_SET); char *dataBuffer = malloc((dataFileLen+1)*sizeof(unsigned char)); fread(dataBuffer, dataFileLen, 1, pdataFile); if (ferror (pdataFile)) { printf("Error reading file contents: %s.", datafilename); }else{ printf("data read from file: "); for(idx = 0; idx<dataFileLen; ++idx){ printf("%2hhx", ((char *)dataBuffer)[idx]); }; }; printf("\n"); // new line fclose (pdataFile); }; return 0; };

第二次执行 Random data: ahFlup1r2PWO1zySK9SBcPIQC5DcCw1mq7JrObea8lDWH&FcLbi7EzBu7ow56KbJ

第二次更新即使在此处发布了答案,我仍然会: data read from file: ahFlup1r2PWO1zySK9SBcPIQC5DcCw1mq7JrObea8lDWH&FcLbi7EzBu7ow56KbJ

该程序在GCC中编译,应该从这里的代码编译。

1 个答案:

答案 0 :(得分:3)

您可能正在将错误数组的内容写入文件。

尝试撰写data而不是test_data

您可能还希望在读取文件时打印的值为前导零(就像您最初打印扫描数据时一样)。