strcmp与2个相同的字符串行为不端

时间:2015-09-28 10:07:16

标签: c strcmp

我有这段代码:

#include <stdio.h>
#include <string.h>

int main() {

  char s1[50], s2[50];

  printf("write s1:\n");
  fgets(s1, sizeof(s1), stdin);

  printf("s2:\n");
  fgets(s2, sizeof(s2), stdin);

  printf("The concatenation of the two strings: %s\n", strcat(s1, s2));

  if( strcmp(s2, s1) < 0 ) {
    printf("s2 is shorter than s1.\n");
  } else if( strcmp(s2, s1) > 0 ) {
    printf("s2 is longer than s1.\n");
  } else {
    printf("strings are equal.\n");
  }

  return 0;
}

问题在于,当我写了两个相同的字符串,比如abc或者其他什么时,strcmp返回“s2比s1短。”

这是正常输出还是我做错了什么?如果是这样,在哪里?

或strcat使字符串不相等?关于这个可以做些什么吗?

谢谢

4 个答案:

答案 0 :(得分:4)

你在做什么

 strcat(s1, s2)
比较前

这将修改字符串s1,因此字符串将不相等

答案 1 :(得分:1)

你在做strcmp之前做了一个strcat。 strcat会将s2连接到s1

答案 2 :(得分:1)

Strcmp根据其内容的值(类似于字典顺序,如果您愿意,但不完全相同)比较字符串,而不是根据它们的长度。

例如:&#34; abc&#34; &GT; &#34; ABB&#34;

答案 3 :(得分:1)

尝试替换

    printf("The concatenation of the two strings: %s\n", strcat(s1, s2));

    printf("The two strings are: '%s' and '%s' and their concatenation: '%s'\n",
    s1, s2, strcat(s1, s2));

然后阅读strcat的说明。

如果这没有帮助,请将%s序列替换为%p。 (可能您必须阅读%p文档中printf格式说明符的说明。)