gpt4 book ai didi

c - 读取二进制文件的文本内容并将其显示到标准输出

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:16 26 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>

typedef struct filedata
{
char data[100];
}data_t;

data_t * fname=NULL;

//IS AN ARRAY OF the structure filedata REQUIRED HERE

void quit()
{
printf("\nPress enter to exit");
fflush(stdin);
getchar();
}


int main()
{
char ch;
fname=(data_t *)malloc(sizeof(data_t));

FILE *fptr=NULL;
atexit(quit);
printf("Please enter the file name to read : ");
fflush(stdin);
scanf("%s",fname->data);
fptr=fopen(fname->data,"rb");

if(fptr == NULL)
{
perror("Could not open the file ");
return;
}
printf("\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("Contents of the file %s are : ",fname->data);

while(fread(&fname, sizeof(data_t), 1,fptr) == 1)
{
// what do I put here?
}

fclose(fptr);
return 0;
}

我想在我的计算机上读取任何包含一些文本或数字的二进制文件并将其显示在标准输出上。

我该怎么做?

我是否应该声明一个结构文件数据的数组,如 data_t data[100]

我应该在上面的while循环中放什么来显示内容?

一个例子:当然,如果我知道结构中的属性,如姓名、年龄等,那么我可以做类似的事情

while ( fread ( &e, sizeof ( e ), 1, fp ) == 1 )
printf ( "\n%s %d %f", e.name, e.age, e.bs ) ;

但是我如何读取任何二进制文件的任何文本内容并将其显示到标准输出?

最佳答案

标准的 strings(1) 实用程序将打印“可打印字符”;默认情况下,它只显示由不可打印字符终止的四个或更多可打印字符的运行。这是一个足够好的定义,strings(1) 使使用 -n 参数显示更长或更短的字符串变得容易。

我可以想到两种机制来实现该实用程序:一种是分配长度为 min 个字符的数组,因此可用于从管道中读取数据;另一个不会分配数组,但只能处理文件。由于数组版本更有用,我将对其进行描述。

你设置了一个标准循环:

int c;
int index = 0;
char arr[MAX];
FILE* f=fopen(whatever);

while((c=fgetc(f)) != EOF) {
int flush_output = 0;

if(isgraph(c))
arr[index++]=c;
else if(c == ' ' && index > 0)
arr[index++]=c;
else if(index > min)
flush_output = 1;

if(flush_output || index == (sizeof(arr)-2)) {
arr[index]='\0';
printf("%s", arr);
index=0;
}
}

接近尾声时有一些不幸的代码;但是我们不能写到数组末尾之后,如果到目前为止我们还收集了超过 min 个字符,我们应该只打印出数组末尾之前的输出.这胜过复制代码,但可能有比这更简洁的机制。

关于c - 读取二进制文件的文本内容并将其显示到标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5528250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com