数字写入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'
[解决办法]
[解决办法]
memset(send_buf,1,sizeof(send_buf));
结尾的0呢?