Linux C 字符串输出函数 puts()、fputs()、printf() 详解

时间:2024-08-02 13:06:50

一、puts() 函数详解

puts()函数用来向 标准输出设备 (屏幕)写字符串并换行,调用格式为:

puts(s);

其中s为字符串变量(字符串数组名或字符串指针)。

puts()函数的作用与语 printf("%s\n", s) 相同。

#include <stdio.h>
#include <string.h> int main(int argc, char **argv)
{
char s[20], *f; strcpy(s, "Hello world!"); // 字符串数组变量赋值
f = "Thank you"; // 字符串指针变量赋值 puts(s);
puts(f); return 0;
}

说明:

(1)puts()函数只能输出字符串,不能输出数值或进行格式变换。

(2)可以将字符串直接写入 puts() 函数中。如:

puts("Hello, Turbo C2.0");

二、fputs() 函数详解

原型:

int fputs(const char * s,FILE * stream);

功能描述:

将指定的字符串写入文件流中,不包含字符串结尾符'\0',返回值是字符, 发生错误时返回值是EOF,利用它可以 替换文件流中数据,但是不能添加数据

示例:

#include <stdio.h>

int main(int argc, char **argv)
{
FILE *fp;
char *filename = "/Users/jianbao/ClionProjects/apue/123.txt";
fp = fopen(filename, "r+");
fseek(fp, 3, SEEK_CUR); fputs("Insert Strings.", fp); return 0;
}

原文件内容:

1234
Second Line. Second Strings.

修改后文件内容:

123Insert Strings. Second Strings.

可以看出,将原文件中的“\n及Second Line.” 替换为了“Insert Strings.”


三、printf() 函数详解

printf()函数是式样化输出函数, 一般用于向 标准输出 设备按规定式样输出消息。printf()函数的挪用式样为:

printf("<式样化字符串>",<参量表>);

其中 式样化字符串 包括两部分内容:

一部分是正常字符, 这些字符将按原样输出;

另一部分是 式样化规定字符, 以"%"开端,后跟一个或几个规定字符,用来确定输出内容式样。

参量表是需求输出的一系列参数, 其个数务必与式样化字符串所阐明的输出参数个数一样多, 各参数之间用","分开, 且顺序逐一对应, 不然将会出现意想不到的过失。

式样化字符串的式样是:

%[标志][输出最小宽度][.精度][长度]式样字符

1、标志:

标志                意义
      -                   结果左对齐,右边填空格
      +                   输出标记(正号或负号)
      空格                输出值为正时输出空格,为负时输出负号
      #                   正在八进制和十六进制线显现前导航O,Ox

假如你还不太理解,没关系!请瞧下面的例子就会了如指掌了:

例1:

#include <stdio.h>

int main(int argc, char **argv)
{
int a = 100;
float b = 123.255; printf("(1)a=%d\n", a); // \n为转义字符,控制换行
printf("(2)a=%10d\n", a);
printf("(3)a=%-10d\n", a);
printf("(4)a=%+d\n", a);
printf("(5)a=% d\n", a);
printf("(6)a=%#o\n", a); // 8进制
printf("(7)a=%#x\n", a); // 16进制
printf("(8)b=%lf\n", b); // 能否对此行的输出存有疑问,这都是float精度惹的祸,卖前就晓得如何对其变动了 return 0;
}

输出:

(1)a=100
(2)a=       100
(3)a=100       
(4)a=+100
(5)a= 100
(6)a=0144
(7)a=0x64
(8)b=123.254997

2、输出最小宽度:

(1) 用十进制整数来表示输出的最少位数。(至多要输出这么多位!)

(2) 若实际位数多于界说的宽度:则按实际位数输出。

(3) 若实际位数少于界说的宽度:a.则右对齐,左边留空。
                           b.有负号,左对齐,右边留空
                           c.表示宽度的数字以0开端,则右对齐,左边留空。

我们再来瞧一个例子:

#include <stdio.h>

int main(int argc, char **argv)
{
int a = 3456; printf("(1)a=%3d\n", a); // 若实际位数多于界说的宽度:则按实际位数输出
printf("(2)a=%10d\n", a); // 若实际位数少于界说的宽度:则右对齐,左边留空
printf("(3)a=%-10d\n", a); // 若实际位数少于界说的宽度:有负号,左对齐,右边留空
printf("(4)a=%010d\n", a); // 若实际位数少于界说的宽度:表示宽度的数字以0开端,则右对齐,左边留空 printf("(5)a=%-010d\n", a); // 左对齐,0无意义。 return 0;
}

输出:

(1)a=3456
(2)a=      3456
(3)a=3456      
(4)a=0000003456
(5)a=3456

3、精度:

精度式样符以“.”开头,后跟十进制整数。意义是:

假如输出数字,则表示小数的位数;若实际位数大于所界说的精度数,则四舍五进。若不敷则补0;

假如输出的是字符,则表示输出字符的个数;若实际位数大于所界说的精度数,则截走超出的部分。

例3:

#include <stdio.h>

int main(int argc, char **argv)
{
printf("(1)%.3f\n", 12.3456);
printf("(2)%.9f\n", 12.3456);
printf("(3)%.3s\n", "abcdefg");
printf("(4)%.9s\n", "abcdefg"); return 0;
}

输出:

(1)12.346
(2)12.345600000
(3)abc
(4)abcdefg

所以对 例1 中的 printf("b=%lf", b) 只需改为 printf("b=%.2lf", b) 就可以对结果进行2位小数的保存了!

4、长度:

长度式样符为 h,l 两种,h表示按短整型量输出,l表示按长整型量输出。

5、式样字符:

式样   意义
————————————————————————————
d: - 以十进制方式输出带标记整数(正数不输出标记);
u: - 以十进制方式输出无标记整数;
f: - 以小数方式输出单、双精度实数;
e: - 以质数方式输出单、双精度实数;
g: - 以%f,%e中较短的输出宽度输出单、双精度实数;
c: - 输出单个字符;
s: - 输出字符串。
————————————————————————————

注:l正在d,o,x,u,前,指的输出精度为long型;正在e,f,g前,指定输出精度为double型

最后还是讲些 转义字符 吧:

转义字符是C言语中表示字符的一种非凡方式。一般使用转义字符表示ASCII字符集中不可打印的控制字符和特定功能的字符,如用于表示字符常量的单撇号('),用于表示字符串常量的双撇号(")和反斜杠(/)等。转义字符用反斜杠/后面跟一个字符或一个八进制或十六进制数表示。

转义字符    意义         ASCII值(十进制)
\a          响铃(BEL)    007
\b          退格(BS)     008
\f          换页(FF)     012
\n          换行(LF)     010
\r          回车(CR)     013
\t          程度制表(HT) 009
\v          笔挺制表(VT) 011
\/          反斜杠       092
\?          问号字符     063
\'          单引号字符   039
\"          双引号字符   034
\0          空字符(NULL) 000
\ddd        恣意字符     三位八进制
\xhh        恣意字符     二位十六进制

字符常量中使用单引号和反斜杠以及字符常量中使用双引号和反斜杠时,都务必使用转义字符表示,即正在这些字符前加上反斜杠。

正在C步骤中使用转义字符\ddd或者\xhh可以方便灵便地表示恣意字符。\ddd为斜杠后面跟三位八进制数,该三位八进制数的值即为对应的八进制ASCII值。\x后面跟两位十六进制数,该两位十六进制数为对应字符的十六进制ASCII值。

使用转义字符时需求注重以下标题:

(1) 转义字符中只能使用小写字母,每个转义字符只能瞧作一个字符。

(2) \v 笔挺制表和\f 换页符对屏幕没有任何影响,但会影响打印机施行呼应作。

(3) 正在C步骤中,使用不可打印字符时,一般用转义字符表示。