首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为什么小弟我fread把文本内容读出来后段异常呢还会有内存地址映射?LINUX下编程

2012-05-02 
为什么我fread把文本内容读出来后段错误呢还会有内存地址映射?LINUX下编程C/C++ codeif(argc!1){if((fpf

为什么我fread把文本内容读出来后段错误呢还会有内存地址映射?LINUX下编程

C/C++ code
    if(argc!=1)    {        if((fp=fopen(argv[2],"r"))==NULL)        {                fprintf(stderr,"open %s failed!\n",argv[2]);                return FALSE;        }        nbytes=send(sockfd,argv[2],strlen(argv[2]),0);        if(nbytes==-1)        {                fprintf(stderr,"send filename: %s failed\n",argv[2]);                return FALSE;        }        nbytes=0;//      while(fgets(sendbuf,1024,fp)!=NULL)        while((ret=fread(sendbuf,sizeof(char),MAXLEN,fp))>0)        {                ret=send(sockfd,sendbuf,strlen(sendbuf),0);                printf("%d\n",strlen(sendbuf));                if(ret==-1)                {                        fprintf(stderr,"send failed\n");                        return FALSE;                }                nbytes+=ret*sizeof(char);                printf("%s",sendbuf);                memset(sendbuf,0,MAXLEN);        }        printf("\n");        printf("send file %s over,%d bytes of file\n",argv[2],nbytes);        fclose(fp);    }


[解决办法]
ret=send(sockfd,sendbuf,strlen(sendbuf),0);
改为如下试试:
ret=send(sockfd,sendbuf,ret,0);
另外,ret最好再声明一个变量,一个变量的职责别太多
[解决办法]
楼上两位说的都需要你去改正。

另外,你并没有认真的判断send的返回值是否小于请求值,只是判断了返回-1的情况,如果要正确一定要严格的判断,循环保证发送完全。
[解决办法]
使用一个\0隔开就行了,接收端对于首个接受的\0做切分,之后的就是二进制数据。

热点排行