1

我有一个 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++;
...
}
4

2 回答 2

3

这不起作用

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

这个错误非常微妙,以至于我花了将近 3 个小时才找到问题的答案:

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

问题可能是因为我U.S International English在我的美国 macbook 上使用布局键盘。

这会导致^键(Shift-6)显示为重音ˆ,直到您按下它变成的辅音,â ê î ô û或者如果您按下空格键,它会将重音变成一个字符,我从来没有意识到这两个ˆ^是不同的。

我不确定英语,但至少在葡萄牙语中,不是字符的 ^ ins 称为抑扬音符号,用于辅音 ê î ô û 表示不同的发音。

因此,如果您使用的是美式键盘,则必须按 Shift+6,然后按空格键^

于 2013-03-08T05:03:13.210 回答
1

“显而易见的事情不起作用”...那是您阅读该函数的联机帮助页的时候:-(。

格式在%s遇到字符串时不会停止读取|...如果您查看 fscanf 文档,您会看到另一个格式指令允许您控制将哪些字符读入字符串与终止转换... .

于 2013-03-08T03:19:15.580 回答