有没有办法在strcmp中使用char?

时间:2017-06-27 14:37:25

标签: c scanf strcmp

我有这个应该是聊天模拟器的程序,它现在应该做的唯一事情就是回复你好!'当用户键入“Hello'。

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>

int main()
{
   printf("Chat simulator!\n");
   do {
      char x;
      printf("[User1] ");
      scanf("%s",&x);
      if (strcmp (x,"Hello") == 0)
      {
         Sleep(1500);
         printf("[User2] Hello!\n");
      }
      else {}
   } while(1);
}

我知道strcmp仅适用于const char *,而不是char,这就是问题,但我无法找到任何其他解决方案为此,我需要在char x中使用scanf,因此它不能成为const char *
也有可能我是{m}使用strcmp错误。
代码:阻止警告:

passing argument 1 of 'strcmp' makes pointer from integer without a cast*
expected 'const char *' but argument is of type 'char'*

修改

所以我将char更改为char[16],因为@ robin.koch告诉我,并且它全部正常工作。谢谢!

2 个答案:

答案 0 :(得分:4)

您无法将字符串与charstrcmp进行比较,但手动操作很容易:

int samechar(const char *str, char c) {
    return *str == c && (c == '\0' || str[1] == '\0');
}

然而,上述功能不是您需要的问题:

  • 您应该从用户那里读取一个字符串,而不是一个字符。
  • scanf()需要指向转化说明符char的{​​{1}}数组的指针。
  • 此外,您应指定要存储到此数组中的最大字符数,以避免缓冲区溢出。
  • 最后,%s只会读一个单词。您可能想要读取用户的完整行。请使用scanf()

以下是修改后的版本:

fgets()

答案 1 :(得分:0)

正如其他人所指出的那样,当字符仅用于存储一个字符时,您尝试使用char将字符串存储到scanf变量中。您应该使用char *char[]变量来保存字符串。所以改变

char x;
printf("[User1] ");
scanf("%s",&x);
//...rest of your code...

char * x = malloc(sizeof(char) * 10); //can hold up to ten characters
printf("[User1] ");
scanf("%s",x);
//...rest of your code...
free(x);

请注意,如果您只想使用char数组而不是指针,则可以使用char x[10];替换上面的第一行并删除free(x);