求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));}
展开
1个回答
展开全部
这个代码看得真是累啊。。
你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
你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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询