C++中定义char name[20]后,为什么用printf("%s",name)就能输出一连串字符串?

在C语言中这样的输出也符合语法规范吗??... 在C语言中这样的输出也符合语法规范吗?? 展开
 我来答
YaNaKaSa
推荐于2016-05-02 · TA获得超过114个赞
知道小有建树答主
回答量:86
采纳率:0%
帮助的人:84.2万
展开全部
%s代表字符串,name是字符数组的首地址,也就是字符串的首地址。所以直接输出字符串。
C++中定义char型数组即是定义C风格字符串。
格式化输出函数printf第一个参数中%s代表可变参数部分中对应位置变量为指向字符串地址的指针。

在C/C++中数组的名是保存该数组首地址的常量。
需要注意:
(1)C++中定义内置类型局部数组变量,不提供默认初始化。这里char是内置类型,如果不初始化其中保存的是内存中的随机数。
(2)C++不会对数组进行越界检查,而是将越界交给OS,如果OS检测内存不可读或写,对齐进行读写OS内核会抛出中断异常。
(3)C++中C-style字符串让然是以'\0'空字符为结束标志。printf中的%s仍然会在输出的时候从name指定的内存位置开始读取数据再交给现存缓存以在显示器上显示。不初始化或不以'\0'结尾的字符串将输出乱码,这是如果越界读取到了不可读的内存,将会报段错误(unix内核)或内存不可读(windows)异常以终端程序。
wo370506875
推荐于2018-03-09 · TA获得超过313个赞
知道小有建树答主
回答量:453
采纳率:0%
帮助的人:309万
展开全部
%s是从起始位置输出字符直到遇到\0为止,合法,
数组在函数中做实参时会转成指针。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
OhYeah_Dragon
2010-09-29 · TA获得超过340个赞
知道答主
回答量:213
采纳率:0%
帮助的人:212万
展开全部
%s的概念 就是输出字符串
字符串必须要以'\0'结尾
也就是如果你的name[20]中有一个位置是'\0'的话
printf("%s",name)就能正确输出

如果你是这样char name[20]={'a','b','c'};由于name数组中没有'\0'你对name指针用printf函数就会出错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wang非在心上
2010-09-29
知道答主
回答量:17
采纳率:0%
帮助的人:10.6万
展开全部
这个就不需问为什么啦!!因为这是它的功能啦!!就像1+1为什么等于2了。你只需要记住它的作用就是 用来输出数据的!!
那个%s是格式标识符啦!!就是规定后面的参数是以怎样的格式输出的!!另外还有其他几种常用格式标识符,%c、%d、%o
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4cb770239
2010-09-29 · TA获得超过145个赞
知道答主
回答量:61
采纳率:0%
帮助的人:79.4万
展开全部
1,%s 是输出字符串;%c,只输出单个字符。
2, 定义name是数组,name表示数组的第一个字符的地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式