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

时间:2018-11-07 13:57:05

标签: c strncmp

如果输入结束,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;
}

3 个答案:

答案 0 :(得分:3)

scanf("%c",&input);

可能只读取一个char。是错误的-请注意您从编译器得到的错误和警告。

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

您也不检查返回值是否完全scanf()有效,因此您实际上并不知道input中的内容。

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

#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;
}

下一次打印输入内容,然后继续确认操作正确。