我想从一个目录中获取一个文件并将其保存在内存中,目标是然后将文件结构中的信息按结构复制到一个tmp文件中,做一些编辑,然后将新信息保存在新的数据文件中。我现在想要做的就是获取文件,然后打印出来。在c中打印出一个数据文件是完全错误的
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
typedef struct hw5_struct {
char f_name[12];
char l_name[12];
int age;
float height;
}HW5_struct;
void printThisFile(FILE *data);
int main(int argc, char *argv[]) {
const char *fileLocation = argv[1];
FILE *originalData = fopen(fileLocation, "r");
if(access(fileLocation, F_OK) != -1)
printf("The file at %s exists\n", argv[1]);
printThisFile(originalData);
//int sizeOfOriginalData = sizeOf(&originalData);
}
void printThisFile(FILE *data) {
printf("printThisFile called\n");
int c;
if (data) {
printf("printing file contents now:\n");
while((c = getc(data)) != EOF)
printf("%c", c);
fclose(data);
}
}
它打印如下:
FredHutcheson À@LarryStarchÍ̼@LucyLu-FredFlintstone 33£@BarnyRubbleÍÌ[email protected]³@RobertHenderson7ffÆ@BobbyNLMcÍ̼@BettyDurnanJPBFloodProfÀ@
我真的不知道什么是应该的样子完全相同,但它绝对不是。
使用[GCC](http://gcc.gnu.org/).....编译所有警告和调试信息(例如'gcc -Wall -Wextra -g')。然后**使用调试器**'gdb';还可以使用一些八进制或六进制转储实用程序来了解文件的内容,例如[od](http://man7.org/linux/man-pages/man1/od.1.html) –
乍一看,您的输出看起来与隐式文件格式兼容。 –
像这样使用'access()'是毫无意义的。如果你打算使用它,在调用'fopen()'之前调用它,但是你不应该打扰。您应该检查文件是否在调用'fopen()'的函数中打开,而不是调用的函数。如果您不知道数据文件中的含义,我们将如何提供帮助?也许你需要显示写这些记录到程序中的程序。你用'fwrite()',不是吗?为什么不使用'fread()'来读回记录? –