为什么下面的代码会使我的电脑发出哔声?

我很难理解为什么这段代码会让我的电脑发出哔哔声。 我已经隔离了这段代码,是偶尔发出哔声的代码,但是我不知道它有什么问题。

const int BUFFER_LENGTH = 8192; char buffer [BUFFER_LENGTH + 1]; int recvResult; do { recvResult = recv(webSocket, buffer, BUFFER_LENGTH, 0); buffer[recvResult] = '\0'; printf("%s", buffer); if (recvResult > 0) { sendResult = send(clientSocket, buffer, recvResult, 0); } }while (recvResult > 0); shutdown(webSocket, SD_SEND); 

为了给出一点上下文,这是一个计算机networking类,我们必须编写代理。 所以我在做的是听取答案,并简单地转发给客户。

当我第一次听到嗡嗡声时,我无法告诉你我跳出椅子有多高。

该缓冲区可能包含一个'\a'字符,使电脑发出哔声。 从5.2.2(字符显示语义):

表示执行字符集中的非字符字符的字母转义序列旨在在显示设备上产生如下动作:

  • \ a(警报)在不改变活动位置的情况下产生声音或视觉警报。

没关系,找到了,它实际上是在做一个偶然的哔声的printf语句!

同意'\a'嘟嘟声解释。

还有一点关于你的代码:

 recvResult = recv(webSocket, buffer, BUFFER_LENGTH, 0); buffer[recvResult] = '\0'; 

请注意,如果存在I / O错误(或者如果您正在处于非阻塞模式并且目前没有数据读取),则recvResult将为-1。

在这种情况下,你会写入禁止的记忆,这是(该死,我讨厌这个短语) 未定义的行为 。 简单地说 – 内存覆盖,这是不好的。

写入buffer 之前,您应该检查套接字错误