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

在C语言中这样的输出也符合语法规范吗??

%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)异常以终端程序。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-09
%s是从起始位置输出字符直到遇到\0为止,合法,
数组在函数中做实参时会转成指针。本回答被提问者和网友采纳
第2个回答  2010-09-29
%s的概念 就是输出字符串
字符串必须要以'\0'结尾
也就是如果你的name[20]中有一个位置是'\0'的话
printf("%s",name)就能正确输出

如果你是这样char name[20]={'a','b','c'};由于name数组中没有'\0'你对name指针用printf函数就会出错
第3个回答  2010-09-29
这个就不需问为什么啦!!因为这是它的功能啦!!就像1+1为什么等于2了。你只需要记住它的作用就是 用来输出数据的!!
那个%s是格式标识符啦!!就是规定后面的参数是以怎样的格式输出的!!另外还有其他几种常用格式标识符,%c、%d、%o
第4个回答  2010-09-29
1,%s 是输出字符串;%c,只输出单个字符。
2, 定义name是数组,name表示数组的第一个字符的地址