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

VSCode中执行C语言字符串反转代码出现额外字符的原因

问题分析与解决方案

核心问题

你的代码存在两个关键错误,导致出现额外字符:

  1. 字符串数组无终止符
    char text[12] = "this is text"; 中,"this is text"恰好包含12个可见字符,但C语言要求字符串必须以'\0'结尾才能被正确识别。数组长度仅为12,没有空间存放终止符,导致reverse函数处理text时会越界读取栈上的无关内存,直到偶然找到'\0',期间输出的随机字节就是你看到的Ç。

  2. 递归终止条件逻辑不严谨
    reverse函数用if(arr[1]!='\0')作为递归判断条件,虽然对正常带终止符的字符串能工作,但无法处理无终止符的情况,会导致无限递归或越界读取内存。

修正后的代码

#include <unistd.h>

void reverse(const char arr[]) {
    if (arr[0] != '\0') {  // 正确终止条件:当前字符为空时停止递归
        reverse(&arr[1]);
        write(1, &arr[0], 1);
    }
}

int main() {
    char text[13] = "this is text";  // 数组大小设为13,容纳12个字符+终止符
    reverse("try ");
    reverse(text);
    return 0;
}

关键修改说明

  • 调整text数组大小为13,确保能存放字符串终止符'\0',让reverse函数可以正确识别字符串结束位置。
  • 把递归终止条件改为arr[0] != '\0',逻辑更直观,同时能避免无终止符字符串导致的越界问题。
  • 将函数参数改为const char arr[],符合字符串字面量只读的特性,消除编译器潜在警告。

修正后输出应为 yrt txet si siht(注意"try "反转后开头有空格),不会出现额外字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:54:57