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

C语言反转字符串后无法打印输出,请问问题出在哪里?

故障原因
  • 核心错误是反转的右边界索引错误:strlen()返回的是字符串不含末尾\0的有效长度,示例中字符串krishna的有效长度为7,对应数组合法下标范围是0~6,p[7]是字符串终止符\0。第一次循环时就把p[0]和\0交换,导致字符串首字符变为终止符,printf读入首字符就判定字符串结束,因此无任何输出。修复方案是将strrv函数中l的初始值改为strlen(p) - 1。
  • 存在函数未前置声明的问题:strrv定义在main之后,调用前未做声明,编译器会默认按返回int类型的函数处理,和实际的void返回值定义不匹配,属于未定义行为,也可能导致运行异常。修复方案是在main前补充void strrv(char p[]);的函数声明,或者把strrv的定义挪到main之前。
  • main函数写法不符合标准C规范:标准写法应为int main(void),执行结束需返回0,旧的隐式int写法在高版本C标准中已被废弃。
修复后的完整代码
#include <stdio.h>
#include <string.h>

// 前置声明函数
void strrv(char p[]);

int main(void)
{
    char p[] = "krishna";
    
    strrv(p);
    printf("%s", p);
    return 0;
}

void strrv(char p[])
{
    // 右边界取有效长度减1,跳过末尾的\0
    int l = strlen(p) - 1;
    int i = 0;
    char tmp;
    
    while(i < l)
    {
        tmp = p[i];
        p[i] = p[l];
        p[l] = tmp;
        
        i++;
        l--;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:39:03