我编写了一个程序,创建一个结构变量,然后使用函数将其写入文件中fwrite。返回的代码是1(我只写了一个结构体变量)。当我尝试使用函数读取文件时,fread它返回0并且变量未完全填充。
此问题仅针对 Windows。我在 Linux(Ubuntu 虚拟机)上尝试了相同的代码,效果很好。
结构如下:
struct MyStruct
{
char comment[40];
int nbpts;
float time[4096];
float value[4096];
};
FILE* fp = fopen(fileTrace, "w");
fwrite(&var, sizeof(struct MyStruct), 1, fp);
fread(&var, sizeof(struct MyStruct), 1, fp);
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Fread 显然知道它最后停在的地方,我的意思是:
\nwhile(fread(buffer, 1, 1, file))\n{\n \xe2\x80\xa6\n}\n\nRun Code Online (Sandbox Code Playgroud)\n该循环下次将在上次停止的地方继续。我假设它只是向前移动文件指针,但有人可以解释它是否\xe2\x80\x99s 完全一样吗?
\n我有一个图像文件,我试图从文件的第 54 个字节读取 8 个字节的数据并将其存储在字符数组(大小为 8 个字节)中。但在执行时,即使指针已从其起始位置向前移动了 8 个字节(从第 54 个字节到第 62 个字节),它也仅读取 8 个字节。当我尝试打印已成功保留的 1 个字节的数据时,它没有打印任何内容。
#include<stdio.h>
int main()
{
FILE *fptr_stego;
FILE *fptr_text;
size_t f_size = 0;
char str[8];
// opening image file
fptr_stego = fopen("stego.bmp", "r");
if(fptr_stego == NULL)
{
printf("FAILED to open stego file\n");
return 0;
}
// opening text file
fptr_text = fopen("decode.txt", "w");
if(fptr_text == NULL)
{
printf("FAILED to open text file\n");
return 0;
}
printf("Successfully opened both files\n");
// shifting pointer to 54th …Run Code Online (Sandbox Code Playgroud) 我想hdr用in.wav文件中的数据填充(struct) 变量,我想将文件的前 64 个字节复制in.wav到另一个文件 ( out.wav)。
但!fread()第二次使用时,in.wav从fread()第一次使用结束的地方开始复制。为什么?
#include <stdio.h>
#include <stdlib.h>
typedef struct FMT
{
char SubChunk1ID[4];
int SubChunk1Size;
short int AudioFormat;
short int NumChannels;
int SampleRate;
int ByteRate;
short int BlockAlign;
short int BitsPerSample;
} fmt;
typedef struct DATA
{
char Subchunk2ID[4];
int Subchunk2Size;
int Data[441000]; // 10 secs of garbage. he-he)
} data;
typedef struct HEADER
{
char ChunkID[4];
int ChunkSize;
char Format[4];
fmt S1; …Run Code Online (Sandbox Code Playgroud) 我对此感到不安fread; 这是非常基础的,但我无法找到答案.
#include <stdio.h>
#include <stdlib.h>
void main ()
{
int i;
FILE *fp;
char *re;
fp = fopen("/net2/192.168.42.151/stud3/2013/dobo1298/data.txt","r");
i = sizeof(char);
printf("%d",i);
re = calloc(10,i);
fread(re,i,1,fp);
printf("%s",*re);
}
Run Code Online (Sandbox Code Playgroud) 当fread加载db文件"ERROR!无法加载数据库"时,我正在做一个关于C(Learn C The Hard Way:Ex17)和Database_load函数的教程.被扔了.为什么不能读取数据库?该文件位于目录中.可以找不到文件吗?或者是否需要更改权限?
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#define MAX_DATA 512
#define MAX_ROWS 100
struct Address {
int id;
int set;
char name[MAX_DATA];
char email[MAX_DATA];
};
struct Database {
struct Address rows [MAX_ROWS];
};
struct Connection {
FILE *file;
struct Database *db;
};
void die (const char *message)
{
if(errno) {
perror(message);
} else {
printf("ERROR!\t%s\n", message);
}
exit(1);
}
void Address_print(struct Address *addr)
{
printf("%d %s %s\n", addr->id, addr->name, addr->email); …Run Code Online (Sandbox Code Playgroud) 我在尝试从文本文件中读取整数时遇到了麻烦:
#include <stdio.h>
#include <string.h>
int main()
{
int op;
/* Open file for both reading and writing */
FILE *d = fopen("intento1.txt", "r");
FILE *f = fopen("bubbletry.txt", "w+");
/* Read and display data */
fread(&op, 4, 1, d);
printf("%d\n", &op);
fclose(d);
/* Write data to the file */
fprintf(f,"%d\n",&op);
fclose(f);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
"intento1.txt"中的第一个数字是30771,但写在"bubbletry.txt"的文本是926363699.你能告诉我为什么会这样吗?
我试图用来fread()确定文件是否是 jpeg,我的想法是使用fread()读取文件的标题以确保它是 jpeg,然后,如果是 - 复制文件。我知道标准的 jpeg 标头是0xff 0xd8 0xff 0xe(0 to f),所以我制作了一个程序来读取文件的前四个字节。
#include <stdio.h>
#include <stdint.h>
typedef uint8_t BYTE;
int main (int argc, char *argv[])
{
FILE *in = fopen(argv[1], "rb");
FILE *out = fopen("output.jpg", "wb");
BYTE buffer [4096];
while (fread(buffer, 1, sizeof(buffer), in))
{
if ((buffer[0] == 0xff) & (buffer[1] == 0xd8) & (buffer[2] == 0xff) & ((buffer[3] & 0xf0) == 0xe0))
{
fwrite(buffer, 1, sizeof(buffer), out);
}
}
fclose(in);
fclose(out);
}
Run Code Online (Sandbox Code Playgroud)
但是,在运行程序后,当我尝试打开 …
我正在尝试编写一个程序,为 .wav 文件添加效果。
该计划应该:
读取 .wav 文件
操纵数据
我陷入了一些奇怪的函数问题fread()- 当我试图读取 4 个字节到我定义的字符数组(大小为 4 个字节)时 - 我得到了单词 + 垃圾。
如果我尝试以相同的方式读取 2 或 3 个字节 - 一切正常。
我尝试在两种情况下(当我读取 2/3 字节时与当我读取 4 字节时)用 while 循环打印数组的内容,直到 '\n' 而不是 printf("%s") - 我得到了相同的结果(第一种情况写字符串,第二种情况写字符串+垃圾)。另外,我写回标题并复制数据 - 创建的文件不是同一首歌!它确实打开了 - 所以标头很好,但数据是垃圾。我会很高兴听到一些关于可能原因的想法。我真的很困惑,请帮助我! 问题 - 输出的打印屏幕