【问题标题】:C - Compare a char array with stringC - 将字符数组与字符串进行比较
【发布时间】:2016-10-17 23:40:39
【问题描述】:

我有一个套接字服务器,它应该接收一条消息并写一个答案。对于某些消息,我想发送一个特殊的答案。例如,如果消息是"Hello",我想回答"Hi!"。这是我的代码的一部分:

...
char in[2000];
char out[2000];
...
while((read_size = recv(fd, in, 2000, 0)) > 0){

    if(strcmp(in, "Hello") == 0){

        strcpy(out, "Hi!\n");

    }
    else{

        strcpy(out, in);

    }

    write(fd, out, strlen(out));

}
...

但是strcmp() 在这里不能正常工作。因为当我输入"Hello"时,in变量中不仅有"Hello",因为长度是2000。但是我现在如何检查,如果收到的消息是"Hello"

【问题讨论】:

  • recv() 不会以空值终止缓冲区。
  • 添加到@EOF:您的套接字服务器应该只听好朋友的声音;-) 示例中输入和输出的视觉匹配缓冲区大小在 else 分支中可能不太匹配(有人会尝试添加或查找不在缓冲区中的空终止,如果所有 2000 个字符都已填满,则无法添加。最好使用 strncpy 而不是 strcpy。例如,请参阅Why should you use strncpy instead of strcpy?

标签: c string compare strcmp


【解决方案1】:

使用strncmp函数,比较字符串的前n个字节:

if (strncmp(in, "Hello", strlen("Hello")) == 0) ...

【讨论】:

  • 如果在recv()之前,缓冲区包含"xxxxo\0",而recv()只收到"Hell"怎么办?您的strncmp() 会错误地报告recv() 收到"Hello"
  • 它似乎可以使用 strlen("Hello") 作为 n。我也用 read_size 试过了,但是没用。
  • @EOF 在其对您问题的评论中为您提供了答案。
最近更新 更多