You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言回文判断场景下strcmp()函数输出不符合预期问题

问题根因
  • C标准要求字符串必须以\0作为结束标志,strcmp、strlen等字符串处理函数都会持续读取内容直到遇到\0才停止。你的temp数组仅完成了n个字符的反转赋值,没有在末尾手动追加\0,数组末尾之后的内存是未初始化的随机值,导致strcmp比对时实际比对的内容远超过你输入的字符串长度,返回结果不符合预期,打印的时候也会出现乱码。
  • 字符数组的长度分配错误:输入长度为n的字符串需要额外1位存储\0,你声明的ch[n]会导致缓冲区溢出,破坏内存数据。
  • scanf("%s",&ch);写法错误,数组名本身就是首地址,不需要加取地址符&。
修正代码
#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    scanf("%d",&n);
    // 多留1位存\0
    char ch[n+1];
    scanf("%s", ch);
    n = strlen(ch);
    // 多留1位存\0
    char temp[n+1];
    int k=0;
    for(int i = n-1; i >= 0; i--)
    {
        temp[k] = ch[i];
        k += 1;
    }
    // 手动追加字符串结束符
    temp[k] = '\0';
    int l = strcmp(ch, temp);
    printf("%d\n",l);
    if(l == 0)
        printf("PALINDROME\n");
    else
        printf("NOT PALINDROME\n");
    printf("%s", temp);
    return 0;
}
修正效果

现在输入回文字符串nitin时,strcmp会正确返回0,判定为回文,反转字符串打印也不会出现乱码。

内容的提问来源于stack exchange,提问作者Sahil Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:36:05