测试字符串相等问题

有一段时间没有在C中编程,所以我肯定在这里遗漏了一些东西,但我无法弄清楚它是什么。

我有两个字符串,如下所示:

char toMatch[] = "--exit--"; char entry[1024]; 

通过这个程序,我有一个while循环接受用户输入来修改整个程序中的字符串entry 。 当entry等于toMatch时,我想在while循环时退出。

我认为使用strcmp函数很容易,但由于某种原因它不起作用。 本来我有这个:

 while(strcmp(entry, toMatch) != 0) { // accept user input here to modify entry } 

但是,这不起作用。 所以我在再次接受用户输入之前添加了一行代码来清除entry内容:

 while(strcmp(entry, toMatch) != 0) { memset(entry, 0, sizeof(entry)); // accept user input here to modify entry } 

这也不起作用。 我需要entry这么长,因为用户的输入可以是小于此的任何长度。 我不知道为什么strcmp()不起作用,所以我想我错过了一些显而易见的东西。

如果总是用零显式地写比较,那么使用strcmp()很容易:

  • strcmp(a, b) == 0表示相等
  • strcmp(a, b) != 0表示不等式
  • 对于等于或等于b a排序strcmp(a, b) >= 0
  • strcmp(a, b) > 0表示b之后a排序
  • 对于等于或等于b之前a排序strcmp(a, b) <= 0
  • strcmp(a, b) < 0表示b之前a排序

如果你在输入中匹配"--exit--"遇到问题,你是否删除了前导空格,尾随空白,尾随换行符(特别是后者,如果你用fgets()读取输入)。 这表明了什么:

 printf("[[%s]]\n", entry); 

方括号显示程序认为字符串末尾的位置。