我有这段代码:
#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使字符串不相等?关于这个可以做些什么吗?
谢谢
答案 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
格式说明符的说明。)