gpt4 book ai didi

c - 结构到二进制

转载 作者:行者123 更新时间:2023-11-30 20:19:39 26 4
gpt4 key购买 nike

typedef struct {
char name[31];
float price;
int in_stock;
} Prod;


int binary(const char* filename, Prod* store){

char NAME = store->name;

float PRICE = store->price;

int STOCK = store->in_stock;


FILE *fp = fopen(filename, "w");

if(fp == NULL){return 1;}


fwrite(&(NAME), sizeof(NAME), 1, fp);
fwrite(&(PRICE), sizeof(PRICE), 1, fp);
fwrite(&(STOCK), sizeof(STOCk), 1, fp);
return 0;
}

我的任务是从结构体中处理二进制文件。我收到以下警告:

"Initialization makes integer from pointer without a cast" at line NAME = store->name.

如果这段代码是错误的,你们能告诉我如何正确地完成这个操作吗?如果写入文件成功,代码必须返回 0,其他情况则返回 1。

最佳答案

char* 指针是指向一个字符的指针,如果您指向字符串,通常是字符串中的第一个字符。

当你创建一个数组时,如果你将它分配给某个东西或将它传递给一个函数,它就会成为指向数组中第一个成员的指针。所以:

char name[31];
char NAME = name;

标识符 NAME 必须是 char* 指针。这就是你得到的错误

"Initialization makes integer from pointer without a cast"

所以如果你写:

char* NAME = store->name;

这会起作用。

但是你还有另一个问题。

fwrite(&(PRICE), sizeof(PRICE), 1, fp);
fwrite(&(STOCK), sizeof(STOCK), 1, fp);

会写得很好,但你不能写 char*,因为 char* 只是字符串第一个字符的地址。您需要执行以下操作:

fwrite(NAME, sizeof(char), strlen(NAME), fp);

将字符串写入文件流。然后你需要终止它:

putc(0, fp);

您放置此空终止字符,以便当您读回文件流时,您知道要读取多少字节才能取回字符串。如果您不想这样做,并且确定字符串不会溢出此缓冲区,则可以为字符串分配一组固定的字节。所以:

fwrite(NAME, sizeof(char), 32, fp);

现在您知道,当您从文件流读回时,前 32 个字节是为字符串预留的。

同样,fwrite(NAME, sizeof(NAME), 1, fp);除了将地址写入文件流之外什么也不做。您需要使用我提到的两种方法之一。

编辑:或者更好的是,按照 Johnny Mopp 所说的去做,简单得多。

关于c - 结构到二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49428481/

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