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

编写字符串重排函数时,malloc分配的字符串仅返回首字符求助

问题分析与修复

你的代码核心问题是访问了字符串的终止符位置,导致新字符串提前被截断。

在循环中,s[len - i] 是错误的索引:字符串 s 的有效字符索引范围是 0 到 len-1,s[len] 是字符串末尾的 '\0' 终止符。当 i=0 时,你把这个终止符写入了 ans[1] 的位置——这就意味着,外部读取返回的字符串时,遇到第一个终止符就会停止,所以只能看到第一个字符。而你逐个打印 ans 的字符时,是直接按索引访问,不会被中间的终止符打断,所以看起来显示正常。

修复方案

把 s[len - i] 改为 s[len - 1 - i],这样就能正确取到字符串末尾的对应字符:

char * solution(char * s) {
    int len = strlen(s);
    int i;
    int index = 0;
    
    char *ans = (char *) malloc(sizeof(char) * (len + 1));
    if (ans == NULL) {
        fprintf(stderr, "Ran out of space in some function \n");
        exit(1);
    }
    ans[len] = '\0';
    
    for(i = 0; i < len/2; i++){
        ans[index++] = s[i];
        // 修正索引:取末尾倒数第i+1个有效字符
        ans[index++] = s[len - 1 - i];
    }
    if(len % 2 == 1){
        ans[index] = s[len/2];
    }
    return ans;
}

验证示例

比如输入字符串 "abcde"(长度5):

  • 修复前:i=0 时写入 s[0]='a' 和 s[5]='\0',ans 变成 "a\0bdc",外部读取仅显示 "a"
  • 修复后:i=0 写入 'a' 和 'e',i=1 写入 'b' 和 'd',最后写入中间字符 'c',最终 ans 为 "aebdc",符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:35:21