不太确定如何使用fread在c中存储字符

时间:2014-02-08 04:37:53

标签: 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 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);

1 个答案:

答案 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);

因为你打印的是以空字符结尾的字符串。