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

11.3.1  puts( )函数数组

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

程序清单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中的程序。code

/*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( )的面向文件版本。二者之间的区别是:get

一、fputs()须要第二个参数来讲明要写的文件。可使用stdout做为参数来进行输出显示,stdout在stdio.h中定义。string

二、与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) ; 。

相关文章
相关标签/搜索