为什么会有“printf输出字符串”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“int”错误

结果表明我们可以直接整体输出字符型数组和字符串,而无法整体输出整形数组(只能输出其地址)


先从字符串讲起。String是java中的一个类,所以一定会重载toString()函数,故toString()会返回其本身。所以直接打印String类的对象会输出具体字符串(就像其他所有类一样)。而字符型数组在内存中的储存方式同String类一样,故输出数组名并不是输出数组首地址,而是直接输出数组内容直到/0;而整形数组只是整形的集合,所以其数组名仅仅是其首地址,我们必须要用for循环才能完整的输出整个整形数组

p,p1中存放的应为字符串,但在输出时还要兼顾前面的输出格式符的控制,如果

是%s,则会在p的地址内的数据输出,而不再输出p本身的内容地址

所以 p,p1离存的都是地址,在用%c,%d时都能作为首地址输出第一个字母或数组元素,

但是如果换用,%s,输出字符串,在一个地址空间内是不能存在字符串的,所以编译器

会认为是连续空间内的字符串,所以就输出了字符串。

printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。

格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。要输出的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些

在c语言中产生格式化输出的函数(定义在 stdio.h 中),其向未重定向终端(显示器、控制台等)输出字符。

//以下程序用于获得输入值i,j并将其输出(i,j之间以逗号隔开)
//以下程序用于输出“百度百科”
 

Format 参数是包含三种对象类型的一个字符串:
* 无格式字符复制到输出流;
* 转换规范,每个规范导致在值参数列表中检索 1 个或更多个项;

通常意义上format的格式如下:

接受整数值并将它表示为有符号的整数,i是老式写法
无符号8进制整数(不输出前缀0)
无符号整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x)
和用f(lf 在C99开始加入标准,意思和 f 相同)
表示的数,此处"e"的大小写代表在输出时用的“e”的大小写
有效位数,如:%.8g表示单精度浮点数保留8位有效数字。
型。可以把输入的数字按照相应转换为对应的字符
。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符)
到此字符之前为止,一共输出的字符个数,不输出文本

不进行转换,输出字符‘%’(百分号)本身

注:%g、%G在小数点位数四位或指数大于等于精度时用%e、%E,否则用%f。

flags 规定输出样式,取值和含义如下:

左对齐,右边填充空格(默认右对齐)
在数字前增加符号 + 或 -
将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用“-”)
输出值为正时加上空格,为负时加上负号

type是e、E、f、g、G时,一定使用小数点

type是g、G时,尾部的0保留

用于控制显示数值的宽度,取值和含义如下:

* 格式列表中,下一个参数还是width

width是一个可选的指定最小值字段宽度的十进制数字字符串。如果转换值

少于字段宽度,该字段将从左到右按指定的字段宽度填充。如果指定了左边调整选项,字段将在右边填充。如果转换结果宽于字段宽度,将扩展该字段以包含转换后的结果。不会发生截断。然而,小的精度可能导致在右边发生截断。

用于控制小数点后面的位数,取值和含义如下:

当type=e,E,f时表示的最大小数位数;

type=其他,表示显示的最大宽度

prec是指可选的精度。精度是一个 .(点)后跟十进制数字字符串。如果没有给出精度,按 0(零)对待。精度指定:

* d、o、i、 u、x 或 X 转换的最少数字显示位数。

* e 和 f 转换的基数字符后的最少数字显示位数。

* g 转换的最大有效数字位数。

* s 转换中字符串的最大打印字节数目。

包含需要输出的数据,可以是常量(字符常量、数字常量、字符串常量),变量,以及运算式。此处的数据应当与前面的format中的格式控制符一一对应(如果不对应会产生错误)。

这些转义序列在字符串中会被自动转换为相应操作命令

printf 函数的一般形式为:

以上形式,我们在Visual C++里输入“printf”(将会看到)。

说明printf函数类型为整型,其返回值是整型值。

printf函数实际上是将所有参数按

printf 也可以这样用(具体请参照 C 语法,字符串相关内容。这不是 printf 特有功能):

因此输出多行时,也并不需要每行调用一次printf。

妙用printf判断闰年程序

(此例中用到了?:的运算符)

其中前边*定义的是总的宽度,后边*是指定输出

个数。分别对应外边参数m和n。

下列环境变量影响 printf 命令的执行:

LANG 在 LC_ALL 和相应的环境变量(以 LC_ 开头)没有指定语言环境时,确定语言环境编目使用的语言环境。

LC_ALL 确定用于覆盖由 LANG 或其它任何 LC_环境变量设置的任何语言环境编目值的语言环境。

LC_CTYPE 确定把文本字节数据顺序解释为字符的语言环境;例如,单一字节对应多字节字符的参数。

LC_NUMERIC 确定数字格式编排的语言环境。此环境变量影响使用 e、E、f、g 和 G 转换字符编写的数字的格式。

  • Plus(第五版):人民邮电出版社,2005年2月1日

无符号8进制整数(不输出前缀0)

无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x)

 单精度浮点数用f,双精度浮点数用lf(尤其scanf不能混用)

     科学计数法表示的数,此处"e"的大小写代表在输出时用的“e”的大小写

左对齐,右边填充空格(默认右对齐)。  例:%-7d 表示输出7位整数左对齐,右边补空格

 输出值为正时加上空格,为负时加上负号

加载中,请稍候......

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 printf输出字符串 的文章

 

随机推荐