2014-02-08 21 views
0

所以,我有以下結構不太清楚如何使用FREAD存儲在C字

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

我想讀的第一個256個字節我將example.txt,並將其存儲到有效載荷但林不知道如何使用fread函數做

我想:

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

回答

1

您使用的fread()

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

看起來不錯...但你malloc()

chunk.payload = malloc(sizeof(char)); 

沒有。您需要爲所有的字符,(可能)在最後一個空字符分配空間......不只是一個字符。您還需要添加的空字符(可能)。嘗試:

chunk.payload = malloc(256 + 1); 
chunk.payload[256] = '\0'; 

可能並不需要在最後的空字符,如果你正在閱讀並不意味着數據以作爲空終止字符串,在這種情況下,你需要跟蹤被處理長度的,只是確保不過去的訪問數據的結尾。

-

另外:

printf("\npayload = %c", chunk.payload); 

..should是(如果空值終止):

printf("\npayload = %s", chunk.payload); 

因爲你打印一個空結尾的字符串。

+0

理想情況下,你也應該檢查從'FREAD()的返回',並可能早添加終止符,如果不讀一個完整的256個字符。 – Dmitri

+0

它的伎倆,太感謝你了。 – user2917692