求linux系统编程高手解答,如何将结构体数组写入一个文件,并读出第二个,现在read总是出参数不对的错误

#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include&... #include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <string.h>#define BIZ_SIZ 100#define FPATH "./students"typedef struct  {char name[10];  int num; }DATE;int swrite(int n,DATE p[]){ int x,i=0; /*for (i=0;i<3;i++) if (-1==(x=write(n,p[i].name,sizeof(DATE)))) {perror("write"); return -1; } snprintf(q,sizeof(q),"%d",p[i].num); printf("%s\n",q); if (-1==(x=write(n,q,sizeof(DATE)))) {perror("write"); return -1; }*/ if (-1==(x=write(n,p,sizeof(DATE)*3))) {perror("write"); return -1; } return x;} int sopen(void){ int k; k=open(FPATH,O_RDWR|O_CREAT|O_TRUNC,0666); if (-1==k) { perror("open"); return -1; } printf("File creat sucess!:%d\n",k); return k;}int sread(int n){ DATE buf; int m; lseek(n,SEEK_SET,sizeof(DATE));  if (0==(m=read(n,buf,sizeof(DATE)))) {perror("read"); return -1; } printf("%s\n",buf.name); printf("%d\n",buf.num);  return m;}int main(int argc, char *argv[]){ DATE a[3]={{"xiaomi",9527},{"liaoli",9528},{"siaoer",9529}}; int n; char buff[BIZ_SIZ]={0}; printf("%d\n",sizeof(DATE));; printf("%d\n",sizeof(a)); n=sopen(); printf("%d BYTES was write\n",swrite(n,a)); printf("The 2nd struct is:%d\n",sread(n));} 展开
 我来答
jhx1008
2011-11-04 · TA获得超过617个赞
知道小有建树答主
回答量:336
采纳率:0%
帮助的人:321万
展开全部
这个代码看得真是累啊。。
你lseek的参数顺序搞错了。。。
lseek(n,SEEK_SET,sizeof(DATE)); if (0==(m=read(n,buf,sizeof(DATE))))
lseek(n,SEEK_SET,sizeof(DATE)); ==> lseek(n,sizeof(DATE),SEEK_SET);
你这个代码能编译?if (0==(m=read(n,buf,sizeof(DATE)))) ,read的第二个参数明显是个地址少了个&? &buf
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式