我尝试使用系统调用填充struct
值。我最初的努力如下。但是我从print语句中获取垃圾值。
int fd;
int nbytes;
struct message {
char *from;
char *to;
int size;
};
struct message m1={"me","you",10};
struct message m2;
fd=creat("structfile",0644);
nbytes=write(fd,&m1,sizeof(m1));
read(fd,&m2,nbytes);
printf("%s %s %d",m2.from,m2.to,m2.size);
还有其他办法吗? (我正在考虑通过分别调用hostent
和dirent
来直接填充gethostbyname
和readdir
等结构的方式。
答案 0 :(得分:1)
问题1:
fd
在哪里初始化?
问题2:
该行
nbytes=write(fd,&m1,sizeof(m1));
写出指针m1.from
和m1.to
的数值。它不会写出他们指向的字符串。
如果您要撰写m1
的内容,则必须序列化m1.from
和m1.to
的内容。有为此目的的图书馆。您可以看到How to serialize data in C的一些参考资料。
答案 1 :(得分:1)
Problem 3
,你的结构包含字符指针:
struct message {
char *from;
char *to;
int size;
};
您的sizeof(m1)
会写出2 (char *) pointers
和an (int)
的大小。 from
和to
指向的数据可能会根据字符串的大小而有所不同。阅读sizeof(m1)
没有考虑指向的字符串的大小。