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

strcmp不会在c中的相等字符串上返回0,c,strcmp,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 phr

因此,我正在制作一个程序,检查一个单词是否是回文,但当涉及到比较最后的字符串时,即使它们是相同的,我得到一个-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");
}

问题在于调用
strev
时,没有从从
fgets
获得的输入中删除换行符。这将导致反向字符串的
换行符
位于字符串的开头,这将导致不匹配,即使您打算提供回文作为输入

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

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);

test
从未初始化。请参阅。换行符对于此特定目的并不重要,因为它与字符串的其余部分一起复制到
test
。目前给出的程序对我来说没有显示所描述的问题。无法复制。投票结束。事实上,这个问题是。
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);