在C语言中将结构附加到文件时遇到的问题
我在将结构附加到文件时遇到一些问题: 操作系统:Ubuntu 14.04 结构:在C语言中将结构附加到文件时遇到的问题,c,file,io,structure,fwrite,C,File,Io,Structure,Fwrite,我在将结构附加到文件时遇到一些问题: 操作系统:Ubuntu 14.04 结构: struct baris { char name[30]; char trusted[1]; int phone; int id; }; Func: 我得到的是: fabio\00\00\00\00\00\00\00\00\00fab\00\00\00\00\00\00\00\00\00fab\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00
struct baris
{
char name[30];
char trusted[1];
int phone;
int id;
};
Func:
我得到的是:
fabio\00\00\00\00\00\00\00\00\00fab\00\00\00\00\00\00\00\00\00fab\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 <1\B5y\00\00\00\00\00\00\00fab\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \C5f\DAy\00\00\00\00\00\00\00
fabio\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00输出看起来基本正确,您期望什么
您正在将二进制数据写入二进制文件。二进制文件不太容易手动检查
例如,结构的第一个成员,name
,在输出中的长度始终为30字节
请注意@BLUEPIXY在评论中指出:
scanf("%s",new.trusted);
如果输入非零长度,则触发未定义的行为,因为trusted
仅为字符串终止符使用的1个字符长。你应该增加它的长度,或者(更好!)停止像这样直接使用scanf()
,而是使用fgets()
读取整行输入,并使用sscanf()
解析它
此外,当使用可能失败的函数(如scanf()
、sscanf()
或fgets()
)时,必须先检查返回值,然后才能依赖它们成功。欢迎使用堆栈溢出!“代码片段”仅用于Javascript/HTML,不用于“任何”代码。(由于没有那么详细的工具提示,这实际上是一个很容易犯的错误。)@Jongware yeap,我看到我只是为了突出显示而添加了它,还有其他方法吗?char trusted[1]的意义是什么代码>?为什么不信任char代码>和%c
?scanf(“%s”,新的。受信任的)
trusted
是一个字符<代码>字符信任[1]
应为字符可信[2]代码>“我得到了什么”?????你到底在哪里买的?您没有读取所提供代码中的任何位置的文件。printf上的输出似乎没有问题。我会检查一下长度和长度。非常感谢。
scanf("%s",new.trusted);