标签: fread

我可以使用没有指针的fread读取动态长度变量吗?

我正在使用cstdio (stdio.h)从二进制文件读取和写入数据.由于遗留代码,我必须使用此库,它必须与Windows和Linux跨平台兼容.我有一个FILE* basefile_,我用的变量来读取configLabelLengthconfigLabel,在那里configLabelLength告诉我多少内存来分配的configLabel.

unsigned int configLabelLength; // 4 bytes
char* configLabel = 0;          // Variable length

fread((char *) &configLabelLength, 1, sizeof configLabelLength, baseFile_);
configLabel = new char[configLabelLength];
fread(configLabel,1, configLabelLength,baseFile_);

delete [] configLabel; // Free memory allocated for char array
configLabel = 0; // Be sure the deallocated memory isn't used
Run Code Online (Sandbox Code Playgroud)

有没有办法在configLabel不使用指针的情况下读入?例如,有一个解决方案,我可以使用c ++矢量库或我不必担心指针内存管理的东西.

c c++ pointers memory-management fread

1
推荐指数
1
解决办法
711
查看次数

读取PNG头的第一个字节时出现奇怪的结果

我正在尝试从PNG文件中读取标头.

结果应该是

Dec: 137 80 78 71 13 10 26 10
Hex: 89 50 4E 47 0D 0A 1A 0A
Run Code Online (Sandbox Code Playgroud)

但是,我明白了

Dec: 4294967 80 78 71 13 10 26 10
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

码:

char T;
pngFile = fopen(Filename, "rb");
if(pngFile)
{
    fread(&T, 1, 1, pngFile);
    fclose(pngFile);
    printf("T: %u\n", T);
}
Run Code Online (Sandbox Code Playgroud)

c++ png byte fread

1
推荐指数
1
解决办法
792
查看次数

FREAD C指针问题

嗨,我有一个非常令人沮丧的指针问题,有人可以让我知道我在这里做错了什么。谢谢

// This functions reads from the file 
void get__data_block_from_disk(char* ptr, int block_num){
    int file_desc;
    int x;
    open_fs(file_path);
    file_desc = fileno(fileptr);
    x = lseek(file_desc, DATA_BLOCK_OFFSET + block_num*BLOCK_SIZE, SEEK_SET);
    fread(&ptr, BLOCK_SIZE, 1, fileptr);
    close_fs();
}

// This function writes to the file
void place__data_block_into_disk(char* ptr, int block_num){
    int file_desc;
    int x;
    printf("char in place: %c\n", ptr);
    open_fs(file_path);
    file_desc = fileno(fileptr);
    x = lseek(file_desc, DATA_BLOCK_OFFSET + block_num*BLOCK_SIZE, SEEK_SET);
    fwrite(ptr, BLOCK_SIZE, 1, fileptr);
    close_fs();
}
Run Code Online (Sandbox Code Playgroud)

c pointers fread

1
推荐指数
1
解决办法
4097
查看次数

使用fread/fwrite在C中读取和写入文件的结构

我有以下结构:

typedef struct {
  char last[NAMESIZE];
  char first[NAMESIZE];
} name;

typedef struct {
  int id;
  name name;
  float score;
} record;

typedef struct {
  record *data;
  size_t nalloc;
  size_t nused;
} record_list;
Run Code Online (Sandbox Code Playgroud)

我试图使用此函数从文件中读取记录:

int file_read(record_list *list, record* rec)
{
  /* irrelevant code eliminated */

  while(fread(&records, sizeof(record), 1, fp))
  {
    *rec = records;
    valid_list_insert = list_insert(list, rec);
    if(!valid_list_insert)
    {
      return 0;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用此函数将record_list写入文件:

int file_write(record_list* list)
{
  /* irrelevant code eliminated */

  if(fwrite(&list, sizeof(record_list), 1, fp) == 0)
  { …
Run Code Online (Sandbox Code Playgroud)

c struct structure fwrite fread

1
推荐指数
1
解决办法
9103
查看次数

使用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;
Run Code Online (Sandbox Code Playgroud)

这有什么不对?

谢谢

c c++ buffer fread

1
推荐指数
1
解决办法
1万
查看次数

为什么fread有时遇到"Bad file descriptor"?

我是从这样的文件中读取的:

#include <stdio.h>

int main() {
    FILE *fp = fopen("sorted_hits", "r+");

    while(!feof(fp)) {
        int item_read;
        int *buffer = (int *)malloc(sizeof(int));
        item_read = fread(buffer, sizeof(int), 1, fp);
        if(item_read == 0) {
            printf("at file %ld\n", ftell(fp));
            perror("read error:");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这个文件很大,我有时会收到"错误的文件描述符"错误."ftell"表示发生错误时文件位置停止.

我不知道为什么它"有时",这是正常的吗?问题出在我的代码或硬盘中吗?怎么办呢?

c file stream fread

1
推荐指数
1
解决办法
3596
查看次数

将缓冲区/指针设置为null

我试图不断从不同的文件中读取数据到unsigned char*类型的缓冲区.但是,在读取下一个文件之前,我似乎无法将缓冲区设置为NULL.

这里只是相关的代码:

#include <stdio.h>
#include <fstream>


int
 main (int argc, char** argv) { 

     FILE* dataFile = fopen("C:\\File1.txt", "rb");
     unsigned char *buffer = NULL;
     buffer = (unsigned char*)malloc(1000); 
     fread(buffer,1,1000,dataFile);
     fclose(dataFile);

     dataFile = fopen("C:\\File2.txt", "rb");
     buffer = NULL;
     fread(buffer,1,1000,dataFile);
     fclose(dataFile);

     system("pause");
     return 0; 

}
Run Code Online (Sandbox Code Playgroud)

我遇到的错误是在第二次出现这行:fread(buffer,1,1000,dataFile);

我得到的错误是:

调试断言失败!表达式:(缓冲区!= NULL)

它指向fread.c的第147行,基本上是:

/* validation */
_VALIDATE_RETURN((buffer != NULL), EINVAL, 0);
if (stream == NULL || num > (SIZE_MAX / elementSize))
{
    if (bufferSize != SIZE_MAX)
    {
        memset(buffer, _BUFFER_FILL_PATTERN, bufferSize);
    }

    _VALIDATE_RETURN((stream != NULL), …
Run Code Online (Sandbox Code Playgroud)

c++ buffer pointers fread

1
推荐指数
2
解决办法
6243
查看次数

C fread 省略 0x0D

我的代码将文件读入 unsigned char* 数组。该文件实际上是一个文本文件,其“正常”行结尾为 0x0D、0x0A,长度为 64 字节。

FILE * inputFile = fopen(sInfile.c_str(), "r+");
unsigned char * readArray = (unsigned char *)malloc(sizeof(unsigned char)*readSize); //readSize=64
int bytes_read = fread(readArray, sizeof(unsigned char), readSize, inputFile);
Run Code Online (Sandbox Code Playgroud)

但 bytes_read 是 59,当我检查 readArray 时,它没有任何 \r (0x0D),但文件有。为什么 fread 会跳过所有这些值?有没有一个设置可以控制这个?

c fread

1
推荐指数
1
解决办法
628
查看次数

从指针指向内存的二进制文件读取结构

struct st {
        char *p;
        int len;
};
Run Code Online (Sandbox Code Playgroud)

这是我需要写入二进制文件的结构,以及保存在中的字符串

char *p

我应该用字符数组数据编写一个二进制文件。写入二进制文件后。还应该能够从二进制文件中以相同的结构读取它。

我尝试使用 FSEEK_END 获取二进制大小,并根据文件大小执行 fread,但它没有保存字符串。请建议。任何帮助/建议/指示将不胜感激。

提前致谢。

示例代码:

 struct st {
         char *p;
         int len; 
 };

 struct st varr;
 varr.len = 100;
 varr.p = new char[gen];
 strcpy(varr.p, "Hello World");

 FILE *p;
 p=fopen("address","wb");
 fwrite(&varr,sizeof(struct st),1,p);
 fclose(p); 
Run Code Online (Sandbox Code Playgroud)

这将向我写入指向二进制文件的指针。但我想在这里写整个字符串,但重点是,它应该用一个 fwrite 完成。

c c++ pointers structure fread

1
推荐指数
1
解决办法
1806
查看次数

有没有办法用 fseek() 更改文件的一行?

我正在用 C 训练文件处理,我试图在fseek()写入和读取时更改文件的单行或位置,fread()无论fwrite()是否更改变量并再次写入整个文件,但显然附加模式和写入模式都不允许您正如我在下面的示例中尝试的那样执行此操作:

void main()
{
    FILE *file;
    char answer;
    char text[7]  = "text 1\n";
    char text2[7] = "text 2\n";

    file = fopen("fseek.txt", "w"); //creating 'source' file
    fwrite(text, sizeof(char), sizeof(text), file);
    fwrite(text, sizeof(char), sizeof(text), file);
    fwrite(text, sizeof(char), sizeof(text), file);
    fclose(file);

    scanf("%c", &answer);

    switch(answer)
    {
    case 'a':
        //attempt to change single line with append mode
        file = fopen("fseek.txt", "a");
        fseek(file, 7, SEEK_SET); //7 characters offset is the second line of the file
        fwrite(text2, sizeof(char), sizeof(text), …
Run Code Online (Sandbox Code Playgroud)

c fseek fwrite file-handling fread

1
推荐指数
1
解决办法
563
查看次数

标签 统计

fread ×10

c ×8

c++ ×5

pointers ×4

buffer ×2

fwrite ×2

structure ×2

byte ×1

file ×1

file-handling ×1

fseek ×1

memory-management ×1

png ×1

stream ×1

struct ×1