簡體   English   中英

使用fscanf讀取序列化數據

[英]read serialized data using fscanf

我有一個C結構數組,我將它序列化為一個文件,我需要再次將該數據檢索到內存。

movie list[50]; //array

typedef struct{
    int code;
    int year;
    float price;
    char title[50];
    char director[30];
    char description[255];
} movie;

序列化數據例子

1|1990|9.900000|Hello world|Foo bar baz|lorem ipsum bla bla|
34|1994|4.900000|lorem ipsum|lorem ipsum|lorem ipsum|
23|1993|5.100000|lorem ipsum|lorem ipsum|lorem ipsum|
.
.
.

為了序列化我只是遍歷數組並將每個屬性fprintf轉換為一行。

但要閱讀數據顯然不起作用

while( fscanf("%d|%d|%f|%s|%s|%s|",&list[i].code, &list[i].year, ...)!= EOF){
i++;
...
}

這不起作用

sscanf(input,"%[ˆ|]|%[ˆ|]|%[ˆ|]",string1,string2,string3);

錯誤是如此微妙,我花了將近3個小時來找到問題的答案:

sscanf(input,"%[^|]|%[^|]|%[^|]",string1,string2,string3);

問題可能是因為我在我的美國macbook上使用US International English布局鍵盤。

這導致^鍵(Shift鍵6),顯示為一個口音ˆ你按下一個輔音則轉為â ê î ô û或者如果你按下空格鍵它打開口音角色,我從來沒有意識到這ˆ^是不同的。

我不確定英語,但至少在葡萄牙語中,不是一個字符被稱為旋風口音,用於輔音toû來代表不同的發音。

因此,如果您使用美式鍵盤,則必須按Shift + 6然后按空格鍵才能生成^

“明顯不起作用”......當你閱讀函數的手冊頁時: - (。

%s格式在到達|時不會停止讀取字符串 ...如果你查看fscanf文檔,你會看到另一種格式指令,允許你控制哪些字符被讀入字符串而不是終止轉換....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM