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

C语言返回字符串第n个字符的函数运行异常问题求解

问题原因及解决方案

核心错误点

  • 字符串输出语义错误:&input[position]拿到的是原字符串第position位的首地址,属于char*类型,使用printf("%s", 指针)时,C语言会从该地址开始逐个输出字符,直到碰到字符串结束符\0才停止,因此会输出从目标位置开始的所有后续字符。
  • 内存操作逻辑错误:你先给result申请了100字节的堆内存,下一行直接把result赋值为&input[position],直接丢失了申请的内存地址,造成内存泄漏,同时返回的其实是原字符串的只读地址,完全没有用到申请的内存。

修复方案

方案1:返回单个字符(最适配需求)

直接修改函数返回值为char类型,不需要额外申请内存,用%c格式化输出单个字符即可:

#include <stdio.h>

char test(char input[],int position){
    return input[position];
}

int main(){
    char k;
    k=test("abcdefghi\n",3);
    printf("%c",k);
    return 0;
}

方案2:返回字符串格式的单个字符(适配字符串处理场景)

如果后续需要对接字符串处理接口,可以将目标字符写入申请的内存,末尾补\0作为字符串结束符,使用完后记得释放堆内存:

#include <stdio.h>
#include <stdlib.h>

char *test(char input[],int position){
    // 单个字符+结束符只需要2字节内存即可
    char *result= malloc(sizeof(char)*2);
    if(result == NULL) return NULL;
    result[0] = input[position];
    result[1] = '\0';
    return result;
}

int main(){
    char *k;
    k=test("abcdefghi\n",3);
    if(k != NULL){
        printf("%s",k);
        free(k);
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:15:04