C字符串比较

时间:2018-01-30 19:31:10

标签: c string loops while-loop

我一直用C ++编写代码,完全用C语言编写。 为什么它不起作用?我想通过键入exit

来结束程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
  char command[4];

  do{
          printf( "  -> " ) ;
          scanf("%c", &command);
  }while(&command != "exit");

  return 0;
}

3 个答案:

答案 0 :(得分:3)

因为在C中你必须使用strcmp进行字符串比较。

在C中,字符串是一个字符序列,以'\0' - 终止字节结尾,其值为0.

字符串"exit"在内存中看起来像这样:

+-----+-----+-----+-----+------+
| 'e' | 'x' | 'i' | 't' | '\0' |
+-----+-----+-----+-----+------+

where 'e' == 101, 'x' == 120, etc.

字符的值由ASCII Table的代码确定。

&command != "exit"

只是比较指针。

while(strcmp(command, "exit") != 0);

是正确的。当两个字符串相等时,strcmp返回0,非零 另有价值。参见

  

man strcmp

#include <string.h>

int strcmp(const char *s1, const char *s2);
     

<强>描述

     

strcmp()函数会比较两个字符串s1s2。如果s1,则返回小于,等于或大于零的整数   分别发现小于,匹配或大于s2

但你又犯了一个错误:

scanf("%c", &command);

此处您只阅读1个字符,此command不是字符串。

scanf("%s", command);

是正确的。

下一个错误是

char command[4];

这可以包含最大长度为3个字符的字符串,因此"exit"不会 适合缓冲区。

成功

char command[1024];

然后你可以存储一个最大的字符串。长度为1023字节。

通常,要保存长度为n的字符串,您需要一个char数组 至少n+1维度。

答案 1 :(得分:0)

显然使用strcmp

while (strcmp(c, "exit"))

您的代码所做的是将输入缓冲区的地址与静态字符串"exit"的地址进行比较,这当然永远不会匹配。您必须比较指示符

orher问题是你有一个四字节缓冲区用于五字节字符串,终结符需要适合。 C这种方式非常棘手,你需要分配一个足够大的&#34;&#34;任何人可能输入的缓冲区或程序将立即崩溃。对测试程序使用1024或者相当大的东西。

现在我说&#34;显然&#34;因为在编写C代码时,您应始终打开C standard library reference以确保您使用正确的函数和参数,并了解您可以使用的工具。

答案 2 :(得分:0)

代码的多个问题

  1. 您需要五个字符而不是四个字符才能包含结尾的空字符\0
  2. 您应该使用%s输入字符串。 %c代表字符
  3. 您正在比较while循环中的内存位置(或指针)。您需要strcmp来比较字符串。