我有一个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++;
...
}
答案 0 :(得分:3)
这不起作用
sscanf(input,"%[ˆ|]|%[ˆ|]|%[ˆ|]",string1,string2,string3);
错误是如此微妙,我花了将近3个小时才找到问题的答案:
sscanf(input,"%[^|]|%[^|]|%[^|]",string1,string2,string3);
问题可能是因为我在美国的macbook上使用U.S International English
布局键盘。
这导致^
键(Shift-6)显示为重音ˆ
,直到您按下辅音变为â ê î ô û
或者如果按空格键,它会将重音变为一个角色,我从未意识到这两个ˆ^
是不同的。
我不太确定英语,但至少在葡萄牙语中,不是一个字符被称为抑扬音,用于辅音toû来代表不同的发音。
因此,如果您使用美式键盘,则必须按Shift + 6然后按空格键才能生成^
答案 1 :(得分:1)
“明显不起作用”......当你阅读该函数的联机帮助页时: - (。
%s
格式在点击|
时不会停止读取字符串...如果查看fscanf文档,您会看到另一种格式说明,允许您控制哪些字符被读入字符串与终止转换....