打印文件的内容

时间:2017-03-30 15:39:43

标签: c

我正在尝试逐字节打印文件的内容。但是,我确实得到了编译器错误" unary *(have int)

的无效类型参数

我的代码是:

 void print_the_file ()
    {
       void *file_hndl;
       UINT32 file_size = 2048;
       UINT8 *hndl; 
       file_hndl = fopen("my_bin_file.bin", "r") ;
       if ( file_hndl == NULL )
       {
          printf("file open failed");
       }
       hndl = (UINT8*)file_hndl;
     /* print the contents */
      for ( UINT32 i = 0; i< 2048; i++ )
    {
        printf ("%02x", *hndl[i] );
    }
   }

请告诉我出错的地方以及打印文件内容的正确方法。

3 个答案:

答案 0 :(得分:0)

fopen会返回FILE *,因此您的file_hndl应属于该类型。当您从fopen检查返回值以打印出错误消息时,您会忽略它并继续尝试从文件中读取。

你实际上并没有从文件中读取内容 - 你需要调用fgetc之类的其他功能来执行此操作。但是,当您尝试读取二进制文件时,使用fopen / fgetc可能并不是您想要的。为此,您要使用openread

以下代码执行您实际尝试的操作。

#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>

void print_the_file(void)
    {
    int file_desc;
    char a_byte;
    size_t err;

    file_desc=open("my_bin_file.bin",O_RDONLY,S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
    if(file_desc==-1)
        {
        printf("file open failed\n");
        return;
        }
    do
        {
        err=read(file_desc,&a_byte,1);
        if(err>0)
            {
            printf("%02x",a_byte);
            }
        }
    while(err>0);
    }

答案 1 :(得分:0)

由于*在变量hndl

之前,错误被触发了
for ( UINT32 i = 0; i< 2048; i++ )
    {
       // printf ("%02x", *hndl[i] );
       printf ("%02x", fgetc(hndl) );
       // remove * if you are using [] or write like this *(hndl+i)
    }

确保使用C99或更高标准进行编译。为此

for ( UINT32 i = 0; i< 2048; i++ )

答案 2 :(得分:0)

尝试这样的事情:

fopen

请注意,"rb"的文件模式为df1.CODE = np.where((df1.CODE == 11.0) | (df1.CODE == 44.0), 1, np.where((df1.CODE == 33.0), 0, 5)) ID_USER CODE 0 433805 1 24 5448 1 48 3434 1 72 34434 1 96 3202 0 120 23766 0 153 39457 1 168 4113 0 172 3435 5 374 34093 1 ,以打开文件以读取为二进制文件。

此外,例程会逐个字符处理整个文件,直到发生EOF或错误。