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

C语言实现原地反转字符串单词顺序的void函数失效问题求解

核心问题

  1. C语言的指针参数是值传递:你在函数内修改str这个指针变量本身的值,只会修改函数栈上的临时副本,不会影响外部传入的原指针的指向。你执行str = rev后,外部的指针还是指向原来的内存地址,而你还把原内存free了,甚至会导致外部访问原内存时出现野指针错误。
  2. 原有赋值逻辑错误:你没有把倒排后的内容写入原指针指向的内存,只是修改了临时指针的指向,自然原数组的内容不会变化。

修改方案

不用改动函数的void返回值和参数类型,只需要把函数末尾的指针替换逻辑删掉,改成把倒排后的rev数组内容复制到原str指向的内存即可,修改后的代码片段如下:

// 删掉原来的这三行
// char* tmp = str;
// str = rev;
// free(tmp); tmp = NULL;

// 替换为下面两行
strcpy(str, rev); // 把倒排后的内容复制到原内存地址
free(rev); // 释放临时申请的rev数组
rev = NULL;

额外优化建议(可选)

你现在的实现需要额外申请和原字符串等长的内存,也可以用原地倒排的方案降低空间复杂度:

  • 先把整个字符串整体反转
  • 遍历字符串,逐个反转每个单词的字符顺序
    不需要额外申请内存,运行效率更高。

测试验证

修改后再运行就能得到你预期的输出:输入By reversed order this is what I mean,输出mean I what is this order reversed By。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:24:04