我有一个用C编写的简单回显服务器,如果收到quit
字
int n;
char buffer[256];
while(strcmp(buffer,"quit") != 0)
{
n = read(sock,buffer,255);
if (n < 0)
{
perror("ERROR reading from socket");
exit(1);
}
printf("Here is the message: %s\n",buffer);
printf("%d-%d\n", sizeof(buffer), strcmp(buffer,"quit"));
n = write(sock,"I got your message",18);
if (n < 0)
{
perror("ERROR writing to socket");
exit(1);
}
}
如何将收到的缓冲区与字符串进行比较?
答案 0 :(得分:2)
缓冲区可能不是0终止,因此使用“字符串”比较函数是错误的。您应该尝试使用strncmp
或memcmp
。
此外,在while
条件下,您在实际阅读buffer
之前进行了测试。
答案 1 :(得分:0)
除了其他人所说的,你的程序的行为是未定义的:在进入循环时,你是在buffer
初始化之前阅读。
答案 2 :(得分:0)
我想通了
void strip(char *s) {
char *p2 = s;
while(*s != '\0') {
if(*s != '\t' && *s != '\n' && *s != '\r') {
*p2++ = *s++;
} else {
++s;
}
}
*p2 = '\0';
}