繁体   English   中英

strncmp 不会在相等的字符串上返回 0

[英]strncmp doesn't return 0 on equal strings

如果strncmp("end",input,3) == 0返回 0 吗? 但是它返回一个 > 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]数组的地址。 这是未定义的行为,所以任何事情都可能发生。

您也没有检查返回值以查看scanf()有效,因此您并不真正知道input

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

调用scanf("%c",&input); 将只读取输入的第一个字符,并将其存储在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;
}

下次在继续确认您正确执行之前打印输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM