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

C语言获取字符串指定索引位置字符返回子串问题

问题根因

你对C风格字符串和printf的传参逻辑理解有偏差:

  • C语言里的字符串是以'\0'作为结束标记的连续char内存块,printf的第一个参数要求是格式字符串指针,传入char*类型指针后,函数会从指针指向的内存位置开始逐字节向后读取字符输出,直到碰到'\0'才停止。
  • 你代码里写的&S[1]等价于S + 1,是指向字符串索引1位置(测试用例里对应字符'e')内存地址的指针,不是单个字符本身。printf拿到这个指针后,会从'e'开始一直输出到字符串结尾,自然就得到了"est",而非你预期的单个'e'。
  • 额外提醒:你声明的函数返回值类型是char*,但函数内部没有写return语句,这属于未定义行为,运行时可能出现不可预期的问题。
修正方法

根据你的实际需求选对应写法即可:

  • 仅打印指定索引的单个字符:用%c格式符明确告诉printf输出目标是单个char类型值,不要对S[1]取地址,同时因为不需要返回值,把函数返回值类型改成void:
    #include <stdio.h>
    void test(char *S) {
        printf("%c", S[1]);
    }
    
    传入"Test"调用该函数,就会输出你预期的字符"e"。
  • 需要函数返回指定索引的单个字符:把函数返回值类型从char*(字符串指针)改成char(单个字符类型),补充返回逻辑:
    char test(char *S) {
        return S[1];
    }
    
    拿到函数返回值后,用%c格式符打印即可得到单个字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:51:23