文档章节

C Primer Plus 第11章 字符串和字符串函数 11.3 字符串输出

idreamo
 idreamo
发布于 2016/08/19 06:41
字数 1018
阅读 20
收藏 0

11.3.1  puts( )函数

puts( )函数的使用很简单,只需要给出字符串参数的地址。程序清单11.8列出了输出字符串的多种方式。

程序清单11.8  put_out.c程序

/*put_out.c 使用puts( )函数*/
#include<stdio.h>
#define DEF "I am a #define string."
int main(void)
{
    char str1[80]="An array was initialized to me.";
    const char * str2 ="A pointer was initialized to me.";

    puts("I'm an argument to puts( ). ");
    puts(DEF);
    puts(str1);
    puts(str2);
    puts(&str1[5]);
    puts(str2+4);

    return 0;
}

输出如下:

I'm an argument to puts( ).
I am a #define string.
An array was initialized to me.
A pointer was initialized to me.
ray was initialized to me.
inter was initialized to me.

注意,每个字符串都单行显示。与printf()不同,puts()显示字符串时,自动在其后面过添加一个换行符

这个例子,让人想起双引号中的字符是字符串常量,并被看作地址。同样,字符数组字符串的名字也被看作是地址。表达式&str1[5]是数组str1的第6个元素的地址。这个元素包含字母‘r’,它也正是puts()输出字符串的起点。与之类似,str2+4指向包含'i'的那个内存单元。puts()如何知道何时停止?遇到空字符它就会停下来,所以应该确保有空字符存在。不要效仿程序清单11.9中的程序。

/*nono.c 不要效仿这个程序*/
#include<stdio.h>
int main(void)
{
    char side_a[]='SIDE A';
    char dont[]={'w','o','w','!'};
    char side_b[]='SIDE B';

    puts(dont);
    return 0;
}

dont缺少一个表示结束的空字符,因它它不是一个字符串,这样puts()就不知道应该到哪里停止。它只是一直输出内存中dount后面的字符,直到发现一个空字符。

11.3.2  fputs( ) 函数

fputs( )是puts( )的面向文件版本。两者之间的区别是:

1、fputs()需要第二个参数来说明要写的文件。可以使用stdout作为参数来进行输出显示,stdout在stdio.h中定义。

2、与puts()不同,fputs()并不为输出自动添加换行符。

注意,gets()丢掉输入时里的换行符但是puts()为输出添加换行符另一方面,fgets()存储输入中的换行符,而fputs()也不为输出添加换行符。假定写一个循环,读取一行并把它回显在下一行,可以这么写:

char line [81];
while(gets(line))
    puts(line);

回忆一下,如果遇到文件结尾,gets()就返回空指针。空指针的值为0(也即假),这样就结束了循环。或者也可以这么做:

char line [81];
while(fgets(line,81,stdin))
    fputs(line,stdout);

在第一个循环中,line数组中的字符串被显示在单独的一行上,这是由于puts()为它添加了一个换行符。第二个循环,line数组中的字符串同样被显示在单独的一行上,这是由于fgets()存储了一个换行符。注意,如果把fgets()和puts()输出结合使用,每个字符串后就会显示两个换行符。关键在于,puts()是为和gets()一起使用而设计的,而fputs()是为和fgets()一起使用而设计的。

11.3.3  printf()函数

printf( )函数使用起来没有puts()那么方便,但是它可以格式化多种数据类型,因而更通用。

它位的区别 之一就是printf()并不自动在新行上输出每一个字符串。相反,您必须指明需要另起一行的地方。因此:printf("%s\n",string) ; 与下面的语句效果一样puts(string) 。

正如您所见,第一种形式需要键入更多的代码,此外计算机需要的执行时间更长。不过,printf()使在一行上输出多个字符串变得更为简单。例如:printf("well, %s, %s\n",name,MSG) ; 。

© 著作权归作者所有

idreamo
粉丝 18
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
C Primer Plus 第11章 11.7 ctype.h字符函数和字符串

第7章“C控制语句 分支和跳转”介绍了ctype.h系列字符相关的函数。这些函数不能被 应用于整个字符串,但是可以被应用于字符串中的个别字符。程序清单11.26定义了一个函数,它把toupper( )函数...

idreamo
2016/08/27
52
0
C Primer Plus 第11章 字符串和字符串函数 11.1字符串表示和字符串I/O

当然,最基本的您已经知道了:字符串(character string)是以空字符(o)结尾的char数组。因此,您所学的数组和指针就可以用在字符串上。但是由于字符串的使用非常广泛,C提供了很多专为字符...

idreamo
2016/08/17
31
0
C Primer Plus 第11章 字符串和字符串函数 11.5 字符串函数

C库提供了许多处理字符串的函数:ANSI C 用头文件string.h给出这些函数的原型。下面是一些最有用和最常用的函数:strlen() 、strcat()、strncat() 、strcmp() 、strncmp() 、strcpy()、 strn...

idreamo
2016/08/25
45
0
C Primer Plus 第11章 11.9 把字符串转换为数字

数字即能以字符串形式也能 以数字形式存储。以字符串形式存储数字就是存储数字字符。例如,数字213即能以数字'2'、‘1’、‘3’、‘0’的形式存储在一个字符串数组中。以数字形式存储213意味...

idreamo
2016/08/29
43
0
C Primer Plus 第11章 字符串和字符串函数 11.4 自定义字符串I/O函数

不一定要使用标准C库的函数进行输入和输出。如果不具备或者不喜欢它们,您可以自行定义,在getchar() putchar()的基础上建立自己的函数。 假定您希望有一个类似puts()但并不自动添加换行符的...

idreamo
2016/08/20
39
0

没有更多内容

加载失败,请刷新页面

加载更多

最简单的获取相机拍照的图片

  import android.content.Intent;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Environment;import android.provider.MediaStore;import andr......

MrLins
58分钟前
4
0
说好不哭!数据可视化深度干货,前端开发下一个涨薪点在这里~

随着互联网在各行各业的影响不断深入,数据规模越来越大,各企业也越来越重视数据的价值。作为一家专业的数据智能公司,个推从消息推送服务起家,经过多年的持续耕耘,积累沉淀了海量数据,在...

个推
今天
8
0
第三方支付-返回与回调注意事项

不管是支付宝,微信,还是其它第三方支付,第四方支付,支付机构服务商只要涉及到钱的交易都要进行如下校验,全部成功了才视为成功订单 1.http请求是否成功 2.校验商户号 3.校验订单号及状态...

Shingfi
今天
4
0
简述Java内存分配和回收策略以及Minor GC 和 Major GC(Full GC)

内存分配: 1. 栈区:栈可分为Java虚拟机和本地方法栈 2. 堆区:堆被所有线程共享,在虚拟机启动时创建,是唯一的目的是存放对象实例,是gc的主要区域。通常可分为两个区块年轻代和年老代。更...

DustinChan
今天
6
0
Excel插入批注:可在批注插入文字、形状、图片

1.批注一直显示:审阅选项卡-------->勾选显示批注选项: 2.插入批注快捷键:Shift+F2 组合键 3.在批注中插入图片:鼠标右键点击批注框的小圆点【重点不可以在批注文本框内点击】----->调出批...

东方墨天
今天
6
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部