我想從一個目錄中獲取一個文件並將其保存在內存中,目標是然後將文件結構中的信息按結構複製到一個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()'來讀回記錄? –