不太清楚如何使用fread在c中存储字符

不太清楚如何使用fread在c中存储字符,c,fread,C,Fread,所以我有下面的结构 FILE *fp = fopen("C:\\Users\\Fiona\\Desktop\\example.txt", "r"); struct packet{ unsigned short block_num; unsigned short block_size; unsigned short crc; unsigned char *payload; }; //Create a dummy packet for

所以我有下面的结构

FILE *fp = fopen("C:\\Users\\Fiona\\Desktop\\example.txt", "r");
struct packet{
     unsigned short block_num;
     unsigned short block_size;
     unsigned short crc;
     unsigned char *payload;
            };

//Create a dummy packet for testing 
struct packet chunk;        
    chunk.block_num = 0;
    chunk.block_size = 256;
    chunk.crc = 0x101001;
    chunk.payload = malloc(sizeof(char));

    printf("block num = %d", chunk.block_num);
    printf("\nblock size = %d", chunk.block_size);
    printf("\ncrc = %d", chunk.crc);
    printf("\npayload = %c", chunk.payload);
我想读取example.txt的前256个字节并将其存储到有效负载中,但我不知道如何使用fread函数来实现这一点

我试过:

fread(chunk.payload, sizeof(char), 256, fp);
使用
fread()

看起来不错。。。但是你的
malloc()

没有。您需要为所有字符分配空间,并且(可能)在末尾分配一个空字符。。。不仅仅是一个角色。您还需要添加空字符(可能)。尝试:

如果您正在读取的数据不打算被视为以null结尾的字符串,则可能不需要结尾处的null字符,在这种情况下,您需要跟踪长度,只需确保不通过数据结尾进行访问

--

此外:

…应为(如果以null结尾):


因为您正在打印以null结尾的字符串。

理想情况下,您还应该检查
fread()
的返回,如果没有读取完整的256个字符,可能会提前添加终止符。
fread(chunk.payload, sizeof(char), 256, fp);
chunk.payload = malloc(sizeof(char));
chunk.payload = malloc(256 + 1);
chunk.payload[256] = '\0';
printf("\npayload = %c", chunk.payload);
printf("\npayload = %s", chunk.payload);