交流电插座写增加额外字符 [英] C Socket Write adding extra characters

查看:76
本文介绍了交流电插座写增加额外字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想追加,邮件在一个聊天程序。在下面的例子buf是一个字符数组持有该消息。奇怪的是,当我送下来一个插座的write()发送它在2扫射。第一个突发正确的信息,然后进行第二次爆破是随机2-3个字母的非ASCII字符。任何想法是什么呢?当我刚发下来的buf插座,它工作正常。

 字符nickmsg [550];
的strcpy(nickmsg,&下;);
strcat的(nickmsg,用户名);
的strcat(nickmsg,>中);
strcat的(nickmsg,BUF);
写(SD,nickmsg,sizeof的(nickmsg));


解决方案

您不想要的sizeof(nickmsg),你想要的strlen(nickmsg)。使用的sizeof(nickmsg),你发送的一切,是在该缓冲区,而不仅仅是字符串你它建立。如果它只是你要发送的字符串中的字符,你需要计算的是什么在那里的长度。 (顺便说一句,有更有效的方式来创建的字符串不是重复strcats)

I am trying to append " " to messages in a chat program. In the below example buf is a character array holding the message. The weird thing is when I send this down a socket with write() it sends it in 2 bursts. The first burst is the correct message, then a second burst is 2-3 random non alphabetic ascii characters. Any idea what is up? When I just send buf down the socket, it works correctly.

char nickmsg[550];
strcpy(nickmsg, "<");
strcat(nickmsg, username);
strcat(nickmsg, "> ");
strcat(nickmsg, buf);
write(sd, nickmsg, sizeof(nickmsg));

解决方案

You don't want sizeof(nickmsg), you want strlen(nickmsg). Using sizeof(nickmsg), you're sending everything that's in that buffer, not just the string you built in it. If it's only the chars in the string you want to send, you need to calculate the length of what's in there. (btw, there are more efficient ways to create strings than repeated strcats)

这篇关于交流电插座写增加额外字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆