strncmp 在相等的字符串上不 return 0

strncmp doesn't return 0 on equal strings

如果输入结束,strncmp("end",input,3) == 0 return 不应该是 0 吗?它 return 是一个 > 0 的数字。

#include <stdio.h>

int main(void) {
  char *strArray[100];
  int strLengths[100];
  char input[100];
  int flag = 0;
  do {
    scanf("%c",&input);
      if(strncmp("end",input,3) == 0) {
        printf("end\n");
      }
      printf("%d\n",strncmp("end",input,3));
    } while(flag !=0);
  return 0;
}

这个

scanf("%c",&input);

只读了一个 char - 也许吧。这是错误的 - 请注意您从编译器收到的错误和警告。

格式说明符不正确 - %c 表示 scanf() 将尝试读取 char,但您传递的是 char[100] 数组的地址。这是未定义的行为,所以任何事情都可能发生。

您也没有检查 return 值以查看 scanf() 是否有效,因此您并不真正知道 input.

中的内容
#include <stdio.h>

int main(void) {
  char *strArray[100];
  int strLengths[100];
  char input[100];
  int flag = 0;
  do {
    scanf("%s",input);  //%c is for a single char and %s is for strings.
      if(strncmp("end",input,3) == 0) {
        printf("end\n");
      }
      printf("%d\n",strncmp("end",input,3));
    } while(flag !=0);
  return 0;
}

下次打印输入,然后再继续确认你做的是正确的。

在您的情况下,与 strncmp("end",input,3) == 0 比较的字符串永远不会匹配,因为 input 将只包含一个字符。

调用scanf("%c",&input);将只读取输入的第一个字符,并将其存储在input