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

如何在C语言中实现返回反转字符串的函数?现有代码求修正

C语言字符串反转函数的修复方案

原代码的问题分析

  • 函数返回的reverse指向局部变量temp的地址,函数执行完毕后局部变量会被销毁,返回的是野指针,访问该指针会导致未定义行为。
  • 没有为反转后的字符串分配内存空间,无法存储完整的反转结果。
  • 违反了“不允许使用printf输出结果”的要求,原代码中存在printf调用。

修复后的代码

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

char *reverse_string(char *param_1)
{
    int n = strlen(param_1);
    // 为反转后的字符串分配内存,包含终止符'\0'
    char *reverse = (char *)malloc(n + 1);
    if (reverse == NULL) {
        return NULL; // 内存分配失败时返回NULL
    }
    
    for (int i = 0; i < n; i++) {
        // 从原字符串末尾开始复制到新字符串的开头
        reverse[i] = param_1[n - 1 - i];
    }
    reverse[n] = '\0'; // 添加字符串终止符
    
    return reverse;
}

int main()
{
    char *str = "games";
    char *reversed = reverse_string(str);
    // 可在此处使用反转后的字符串,后续需手动释放内存避免泄漏
    free(reversed);
    return 0;
}

关键说明

  • 内存分配:用malloc分配原字符串长度+1的内存(额外空间存储终止符),确保反转结果有合法存储区域。
  • 内存释放:调用reverse_string后,必须在合适时机用free释放内存,避免内存泄漏。
  • 终止符处理:字符串必须以'\0'结尾,否则无法被C语言字符串函数正确识别。
  • 野指针规避:返回堆上分配的内存地址,函数执行完毕后不会被销毁,是合法有效的指针。

内容的提问来源于stack exchange,提问作者Femi-Laizer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:20:38