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

C语言打印字符串首字符异常求助:为何输出整个字符串而非单个字符

嘿,我来帮你把这个问题掰明白~

问题的核心:你用错printf的格式符啦!

你写的代码里,initial = &(str[0])其实就是让initial指向字符串"radar"第一个字符'r'的内存地址,对吧?但你用了printf的%s格式符来输出——这里要划重点:%s的作用是从给定的指针地址开始,挨个打印字符,直到碰到字符串结束符'\0'才会停下,它根本不是用来输出单个字符的!

所以当你指向str[0]时,%s从'r'的位置开始,一直打印到末尾的'\0',自然就输出了整个"radar";换成指向str[1]时,起始位置变成了'a',打印到'\0'就剩下"adar"了,这就是为啥会出现你看到的结果。

想打印单个字符?这么改就行

如果你的目标是输出字符串的第一个字符,只需要把printf的格式符换成%c(专门用来输出单个字符的格式符),代码可以改成下面两种方式之一:

// 直接用数组下标取字符
printf("Its first character is %c\n", str[0]);

// 或者用指针解引用
printf("Its first character is %c\n", *initial);
额外唠个小知识点

在C语言里,字符串本质上是个以'\0'结尾的字符数组,字符指针char *指向的就是这个数组的起始地址。str[i]其实等价于*(str + i),而&str[i]就是str + i——也就是指向数组第i个元素的指针,这也是为啥你的代码里指针移动后,%s会从对应位置开始打印剩下的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:48:13