用c打印出数据文件是完全错误的

时间:2017-10-10 05:01:20

标签: c file io fopen

我正在尝试从目录中获取文件并将其保存在内存中,目标是然后将文件结构中的信息按结构复制到tmp文件中,进行一些编辑,然后将新信息保存到新数据中文件。我现在要做的就是获取文件,然后打印出来。

#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ÍÌl@AmandaHelix33³@RobertHenderson7ffÆ@BobbyNLMcÍ̼@BettyDurnanJPBFloodProfÀ@

我真的不知道它究竟应该是什么样子,但绝对不是那样。

1 个答案:

答案 0 :(得分:1)

如果编写该文件的任何内容正在编写hw5_struct

的二进制版本,那么这是有意义的

如果是这种情况,则需要通过执行相应的二进制读取来加载文件

FILE *originalData = fopen( fileLocation, "rb" );

HW5_struct tempStruct;

fread ( &tempStruct, sizeof(hw5_struct),1, data);

然后你可以通过打印这些位来分开它。

printf("%s %s %d %f\n", tempStruct.f_name, tempStruct.l_name,tempStruct.age, tempStruct.height);

您当前的读取代码仅适用于文本文件。