所以我有以下结构
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);
答案 0 :(得分:1)
您使用fread()
fread(chunk.payload, sizeof(char), 256, fp);
看起来不错......但是你的malloc()
chunk.payload = malloc(sizeof(char));
没有。您需要为所有字符分配空间,并且(可能)在末尾分配一个空字符...而不仅仅是一个字符。您还需要添加空字符(可能)。尝试:
chunk.payload = malloc(256 + 1);
chunk.payload[256] = '\0';
如果您正在阅读的数据不打算被视为以null结尾的字符串,则可能不需要末尾的空字符,在这种情况下,您需要跟踪长度并且只需要一定不要访问数据的末尾。
-
此外:
printf("\npayload = %c", chunk.payload);
..应该是(如果以null结尾):
printf("\npayload = %s", chunk.payload);
因为你打印的是以空字符结尾的字符串。