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

数字写入txt文件中是乱码,如果是字符的话,就可以,求指导,该怎么处理

2012-03-20 
数字写入txt文件中是乱码,如果是字符的话,就可以,求指导fpfopen(D:\\a.txt,a+)for(int i 0 isiz

数字写入txt文件中是乱码,如果是字符的话,就可以,求指导
fp=fopen("D:\\a.txt","a+"); 
for(int i = 0; i<sizeof(recv_buf); i++)
fprintf(fp,"%s",recv_buf);
fprintf(fp,"\n");
其中recv_buf是socket通信接收到的,
如果发送端数组这样定义就不出错,char send_buf[20]="dafdaskfldslk";
如果发送端数组这样定义就出错,char send_buf[20];memset(send_buf,1,sizeof(send_buf));
请问这是为什么?

[解决办法]
仅供参考

C/C++ code
void HexDump(int cn,char *buf,int len) {    int i,j,k;    char binstr[80];    for (i=0;i<len;i++) {        if (0==(i%16)) {            sprintf(binstr,"%03d %04x -",cn,i);            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);        } else if (15==(i%16)) {            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);            sprintf(binstr,"%s  ",binstr);            for (j=i-15;j<=i;j++) {                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');            }            printf("%s\n",binstr);        } else {            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);        }    }    if (0!=(i%16)) {        k=16-(i%16);        for (j=0;j<k;j++) {            sprintf(binstr,"%s   ",binstr);        }        sprintf(binstr,"%s  ",binstr);        k=16-k;        for (j=i-k;j<i;j++) {            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');        }        printf("%s\n",binstr);    }}
[解决办法]
fprintf(, "%s", recv_buf)认为recv_buf里面存放的是字符串,因此会一直写,直到遇见0。你用memset把所有内容都填1,那么fprintf会越界访问一直到遇到0为止。
fprintf()是用来写文本的。写二进制建议用fwrite()。
[解决办法]
memset(send_buf,0,sizeof(send_buf));//改为0,就好了,因为你这样char send_buf[20]="dafdaskfldslk";定义一个字符串默认了结尾是'0'
[解决办法]
探讨

楼主搞清楚 int i = 0 和 char c = '0' 的关系没。

[解决办法]
memset(send_buf,1,sizeof(send_buf));

结尾的0呢?

热点排行