Tag: fread

在C中读取和写入64位64位

我有这个超级简单的代码,我读取8个字节的块(我将在代码中稍后加密它们),然后将它们写在一个新文件中。 它运行良好,但最后8个字节没有写入。 知道为什么吗? #include #include #include #include int main() { uint64_t data; FILE *input, *output; // create output file output = fopen(“output.txt”, “w”); // read file input = fopen(“test.txt”, “rb”); if(input) { while(fread(&data, 8, 1, input) == 1) { fwrite(&data, 8, 1, output); } size_t amount; while((amount = fread(&data, 1, 8, input)) > 0) { […]

从二进制文件中读取动态大小的字符串

我需要知道如何使用fread()从二进制文件中读取字符串。 根据我的理解,事情是,如果我想将某些字符串的值复制到一个声明如下的新字符串: char *string; 我需要先使用strlen()计算另一个字符串的长度,使用该值为malloc保留新字符串的内存 ,然后使用strcpy()将另一个字符串的值复制到我的新字符串中 有点像: newLength = strlen ( otherString ) + 1; string = malloc ( sizeof ( char ) * newLength ); if ( string == NULL ) { return ( FALSE ) } 但是如果我从二进制文件中读取数据会发生什么,并且我试图从所述文件中读取一个字符串,但我事先并不知道它的长度,因此我不能使用malloc为所述字符串保留内存? 这是否有效,即使我还没有为字符串保留内存(我不太相信)?: fread ( string, sizeof ( char ), strlen ( string ), currentFile ); 我现在有点卡住了。 希望你们能给我一些启示并引导我一点。

fread into struct错误地读取数据

我试图将位图(.bmp)图像标题读入c中的struct 。 typedef unsigned short WORD; typedef unsigned long DWORD; typedef struct _BITMAPFILEHEADER { WORD Type; DWORD Size; WORD Reserved1; WORD Reserved2; DWORD OffBits; } BITMAPFILEHEADER; 我的代码读取位图文件 FILE *fp; BITMAPFILEHEADER header; fp = fopen(file,”rb”); if (fp == NULL) { printf(“cannot open file!\n”); return 1; } fread(&header, sizeof(BITMAPFILEHEADER), 1, fp); printf(“Type: %02x\n”, header.Type); printf(“Size: %04x\n”, header.Size); […]

使用fread()和fseek()在C中读取文件的一部分

我正在尝试将文件读入缓冲区,块大小为BLOCK_SIZE (当前等于1000 unsigned chars )。 我的代码最初找到了为了读取整个文件而必须读取的块数(通常为2-4),然后迭代通过for循环读取文件(忽略“ +17+filenamesize ”的东西,这就是全部在该计划的后期需要。 但是,仅在第一次,当j=1 ,它是否实际将数据放入buf数组中。 在其他情况下,当j != 1 , strlen(buf)返回0 。 我认为问题是使用fseek()在读取文件之前寻找文件的第二部分或者是内存分配问题。 任何帮助将被赞赏使它将文件的1000-1999 个字符读入buf数组。 附件是代码的相关部分: unsigned char *buf; source = fopen(localpath,”r”); temp = filesize / BLOCK_SIZE + 1; for (j=1; j <= temp; j++) { if (j == 1) { buf = (unsigned char *) malloc((sizeof(unsigned char)) * (BLOCK_SIZE + […]

使用fread读入int缓冲区

我想知道我是否可以使用fread将数据读入整数缓冲区。 我看到fread()将void *作为第一个参数。 所以我不能只传递一个整数缓冲区(类型转换为void *),然后使用它来读取我想要的文件中的howmuchevery字节,只要缓冲区足够大? 即。 我无法做到: int buffer[10]; fread((void *)buffer, sizeof(int), 10, somefile); // print contents of buffer for(int i = 0; i < 10; i++) cout << buffer[i] << endl; 这有什么不对? 谢谢

如何使用fread从文件中读取特定数据?

以下代码使用fwrite将student的数据写入文件并使用fread读取数据: struct record { char name[20]; int roll; float marks; }student; #include void main() { int i; FILE *fp; fp=fopen(“1.txt”,”wb”); //opening file in wb to write into file if(fp==NULL) //check if can be open { printf(“\nERROR IN OPENING FILE”); exit(1); } for(i=0;i<2;i++) { printf("ENTER NAME, ROLL_ NO AND MARKS OF STUDENT\n"); scanf("%s %d %f",student.name,&student.roll,&student.marks); fwrite(&student,sizeof(student),1,fp); […]

使用C解析wtmp日志

对于我们的赋值,我们得到一个wtmp日志的副本,并期望解析它,并以排序的格式输出它,类似于last的输出。 现在,我知道文件wtmp包含一个utmp结构列表。 保证提供的文件至少包含一个utmp结构,我应该假设二进制文件中的所有结构都是正确构造的。 我通过man utmp阅读,并且我已成功编写了一个程序来读取所提供的二进制文件的结构。 (我为漫长的打印方法道歉) #include #include #include #include void utmpprint(struct utmp *log); int main() { int logsize = 10; FILE *file; struct utmp log[logsize]; int i = 0; file = fopen(“wtmp”, “rb”); if (file) { fread(&log, sizeof(struct utmp), logsize, file); for(i = 0; i ut_type, log->ut_pid, log->ut_line, log->ut_id, log->ut_user, log->ut_host, log->ut_exit.e_termination, log->ut_exit.e_exit, log->ut_session, […]

C,从bin文件中读取二进制文件

我对C很陌生,但我遇到了一个问题… 我的最终目标是从.bin文件中读取(然后printf到控制台)二进制文件,但是现在我一步一步地尝试只读取第一位… 我的代码: … FILE *file = fopen(“test1.bin”, rb); int i = 0; fread(&i, 1, 1, file); printf(“%i\n”, i); … 现在我尝试了三个不同的.bin文件,一个输出0,另外两个输出12个! 当我从文件中读取1位时,为什么输出2/12? 不应该是0还是1? 我究竟做错了什么? 非常感谢。

C语言:popen()与fread()?

我已经被困在这几天了,它变得非常令人沮丧。 我正在使用popen()来调用命令行进程并获取其输出并将其存储在C字符串中。 我正在使用fgets()但似乎在新行之后中断,所以我使用的是fread() 。 唯一的问题是返回的C字符串有时会混乱。 这是我的代码: const char *cmd = “date”;//This the shell command char buf[BUFSIZ];//Output of the command FILE *ptr; int c; if ((ptr = popen(cmd, “r”)) != NULL) while(fread(buf, sizeof(buf),1, ptr)) while ((c = getchar()) != EOF) printf(“output = %s”, buf); (void) pclose(ptr); 最终的C字符串有时会有奇怪的字符,不应该存在,或者有时甚至没有字符串可用。 有人可以帮忙吗? ): 编辑:这是我在使用fgets()时所做的事情Shell命令可以是输出文本的任何东西。 不只是“约会”。 if ((ptr = popen(cmd, “r”)) […]

C从实时文件中读取(文件大小不断增大)

我有一个正在录制的应用程序,捕获文件使用fread()和feof()继续增加大小,但是feof()提前打破了循环,所以什么是保持从流中读取的最佳技术 我应该等待,然后我可以推进文件流? 我应该再次打开文件并通过计算读取字节的总数前进到位置吗? 也许别的什么? 代码必须读取文件,构建数据包并发送包装,并且发送与固定大小的文件一致