文档章节

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

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
170
4
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
5
0
Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
8
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部