C 知识量:16 - 74 - 317
C有3个标准库函数用于打印字符串,分别是puts()、fputs()和printf()函数。
使用puts()函数时,只需要将字符串的地址作为参数转递给它即可,例如:
#include <stdio.h> #define M "Hello pnotes.cn" int main(void) { char str1[20] = "I am Jeff"; char *str2 = "I like programming"; puts(M); puts(str1); puts(str2); puts(&str1[2]); puts(str2 + 3); system("pause"); return 0; }
运行结果为:
Hello pnotes.cn I am Jeff I like programming am Jeff ike programming
puts()函数在完成打印后会自动添加一个换行符。以上运行结果表明:
用双引号括起来的内容是字符串常量,而且被视为该字符串的地址。
存储字符串的数组名被视为地址。&str1[2]表示从数组str1的第3个元素开始打印。
str2+3表示指向该字符串的第4个存储单元,并从此处开始打印字符串。
注意:puts()函数在遇到空字符的时候才会停止打印,因此,必须确保打印内容有空字符。
fputs()与puts()函数的区别如下:
fputs()函数的第2个参数指明要写入数据的文件,如果要打印在显示器上,应当用定义在stdio.h中的stdout(标准输出)作为参数。
fputs()函数不会在输出末尾添加换行符,而puts()函数会。
fputs()函数与fgets()函数配对使用,puts()函数与gets()函数配对使用。
注意:gets()函数丢弃输入中的换行符,而puts()函数在输出中添加换行符;fgets()函数保留输入中的换行符,而fputs()函数不在输出中添加换行符。因此,如果混合使用fgets()函数和puts()函数,每个待显示的字符串后面就会有两个换行符。
与puts()函数一样,printf()函数也把字符串的地址作为参数,它可以格式化显示不同的数据类型,功能更加强大。
printf()函数不会自动在字符串末尾添加换行符,但可以在待打印内容中特定位置添加\n来打印换行符。例如以下两行代码效果相同:
printf("%s\n", string); puts(string);
除了使用C库中的标准函数外,还可以在getchar()和putchar()函数基础上,创建自定义函数,以实现想要的功能。
以下示例是自定义输出函数print1(),功能类似puts()函数,但不添加换行符:
void print1(const char * s) { while (*s) putchar(*s++); }
以上代码中,putchar()循环打印字符串s的每个字符,当s指向空字符时,*s的值是0,循环打印结束。注意:++的优先级比*要高,因此将先计算s++部分,再打印,但是后缀++表示先取当前值再自增。
可以在print1()函数基础上添加一个功能,例如返回打印的字符数量,示例如下:
int print2(const char * s) { int count = 0; while (*s) { putchar(*s++); count++; } putchar('\n'); return (count); }
综合应用print1()和print2函数编写一段代码:
#include <stdio.h> void print1(const char * s); int print2(const char * s); int main(void) { print1("I am Jeff and"); print1(" I like programming.\n"); printf("There are %d characters in s.\n", print2("Goodbye!")); system("pause"); return 0; } void print1(const char * s) { while (*s) putchar(*s++); } int print2(const char * s) { int count = 0; while (*s) { putchar(*s++); count++; } putchar('\n'); return (count); }
运行结果为:
I am Jeff and I like programming. Goodbye! There are 8 characters in s.
使用printf()打印print2()的返回值时,需要先执行print2(),因此结果先打印“Goodbye!”,再打印printf()字符串字面量部分。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6