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

C字符串反转函数无效求助:调用后字符串未发生反转

C字符串反转函数无法正常工作的问题修复

你的代码里有两个关键错误导致反转失败:

  1. 字符串长度计算错误
    计算长度时,判断条件写成了*(string + i) != '0'——这里你混淆了字符'0'和字符串结束符'\0'。C语言中字符串是以'\0'作为结束标记的,用'0'会导致程序一直读取内存直到碰巧遇到字符0,len值完全错误,甚至引发越界访问。

  2. 反转循环逻辑错误
    当前的反转循环会把整个字符串交换两遍:从两端开始交换,当n增长到超过j时,之前交换过的字符会被再次交换回来,最终字符串又变回原样。正确的逻辑是只交换到字符串中间位置,当n < j时停止循环。

修正后的代码如下:

#include <stdio.h>

char* reverse(char* string); 

int main(int argc, char* argv[]) { // 原代码的arc是笔误,修正为argc
    char word[] = "Hello World!";

    printf("%s\n", word);
    printf("%s\n", reverse(word));
    return 0;
}

char* reverse(char* string) {
    int i, j, n = 0;
    int len = 0;
    char temp;

    // 获取字符串长度
    for (i = 0; *(string + i) != '\0'; i++) {
        len++;
    }

    // 反转字符串:只交换到中间位置
    for (j = len - 1; n < j; j--) {
        temp = string[n];
        string[n] = string[j];
        string[j] = temp;
        n++; 
    }

    return string; // 直接返回string即可,和&string[0]等价
}

运行修正后的代码就能得到预期输出:

Hello World!
!dlroW olleH

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:30:50