strcmp在c中的相等字符串上不返回0

时间:2017-02-06 23:03:05

标签: c strcmp

所以我正在制作一个程序,检查一个单词是否是回文,但是当结束比较最后的字符串时,即使它们是相同的,我得到-1结果编辑:复制粘贴我使用的完全相同的代码

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

int main()
{
    char input[50];
    char test[50];

    int ret;

    printf("Enter word or phrase to compare ");
    fgets(input,sizeof(input),stdin);
    strcpy(test,input);

    strrev(input);

    ret = strcmp(test,input);

    if(ret == 0)
        printf("\n this is a palindrome ");
    else
        printf("\n this is not a palindrome");
}

对于输入我使用“ala”,我知道是一个回文,我得到了结果

this is not a palindrome

Demonstration on IDEONE.

1 个答案:

答案 0 :(得分:1)

问题是,您调用strrev时不会从fgets获取的输入中删除换行符。这会导致您的反向字符串在字符串的开头有newline,即使您打算提供回文作为输入,也会导致不匹配。

虽然有多种方法可以实现这一点,但一种方法是查看输入的最后一个字节,看看它是否是换行符。如果是,请将其删除。

if (fgets(input,sizeof(input),stdin) == NULL) {
    /* todo: ... handle error ... */
    return 0;
}
len = strlen(input);
if (input[len-1] == '\n') input[--len] = '\0';
strcpy(test,input);