
C语言printf()函数: 格式化输出函数
printf()函数是最常用的格式化输出函数,其原型为:
int printf( char * format, ... );
printf()将根据参数格式字符串转换并格式化数据,然后将结果输出到标准输出设备(显示器),直到出现字符串结尾('\ 0')为止.
参数格式字符串可以包含以下三种字符类型:
常规文本中c语言中printf输出格式,ASCII控制字符将直接输出,例如\ t,\ n等具有特殊含义的格式转换字符
格式转换为百分号(%)和以下格式字符. 通常,每个%符号后面必须有一个参数(当出现%%转换字符时,只会直接输出%字符),并且要输出的数据类型必须与转换字符类型相对应. 一样.
printf()格式转换的一般形式如下:
%(flags)(width)(. prec)type
括号中的参数是可选参数,并且%和type是必需的. 下面介绍几种类型的类型.
1)整数
2)字符和字符串

prec有几种情况:
width是参数的最小长度. 如果此列不是数字值而是*符号,则表示将以下参数用作参数长度.
标志具有以下情况
【返回值】如果成功,则返回写入的字符数.
如果发生写入错误,则将设置文件错误标志(可由ferror()检测到),并将返回负数.
如果在写宽字符时发生多字节字符编码错误,则将errno设置为EILSEQ并返回负数.
printf(格式,...)等效于fprintf(stdout,格式,...),有关更多信息,请参考fprintf()函数.
[示例]分别输出整数,浮点数和字符串.
#include<stdio.h>
int main(void)
{
int a=1;
float b=5.0;
char str[100]= "";
scanf("%c %c %c",&a,&b,str);
/*分别演示 整数*/
printf("int is:%d\n",a);
/*分别演示 浮点数*/
printf("float is:%f\n",b);
/*分别演示 字符串*/
printf("char is:%s\n",str);
return 0;
}
输出结果:
[运行结果]
1 4.4 fs int is:1 float is:4.400000 char is:fs
该示例首先等待用户输入一个整数浮点数和一个字符串,然后调用函数printf()根据相应的格式输出.
另一个例子,以更多格式输出数据.
#include <stdio.h>
int main()
{
printf ("Characters: %c %c \n", 'a', 65);
printf ("Decimals: %d %ld\n", 1977, 650000L);
printf ("Preceding with blanks: d \n", 1977);
printf ("Preceding with zeros: 0d \n", 1977);
printf ("Some different radices: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);
printf ("floats: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416);
printf ("Width trick: %*d \n", 5, 10);
printf ("%s \n", "A string");
return 0;
}
输出结果:
Characters: a A Decimals: 1977 650000 Preceding with blanks: 1977 Preceding with zeros: 0000001977 Some different radices: 100 64 144 0x64 0144 floats: 3.14 +3e+000 3.141600E+000 Width trick: 10 A string
C语言的fprintf()函数: 输出函数(将输出数据格式化为文件)
头文件:
#include <stdio.h>
定义功能:
int fprintf(FILE * stream, const char * format, ...);
功能描述: fprintf()将根据参数格式字符串对数据进行转换和格式化,然后将结果输出到参数流指定的文件中,直到出现字符串末尾('\ 0').
返回值: 有关参数格式字符串的格式,请参阅printf(). 如果成功,则返回输出的实际字符数. 如果失败,则返回-1.
示例
#include <stdio.h>
main()
{
int i = 150;
int j = -100;
double k = 3.14159;
fprintf(stdout, "%d %f %x \n", j, k, i);
fprintf(stdout, "%2d %*d\n", i, 2, i);
}
执行:
-100 3.141590 96 150 150
C语言sprintf()函数: 将格式化的数据写入字符串
头文件:
#include <stdio.h>
sprintf()函数用于将格式化的数据写入字符串. 它的原型是:
int sprintf(char *str, char * format [, argument, ...]);
【Parameters】str是要写入的字符串; format是格式字符串,与printf()函数相同;参数是变量.
除了前两个参数的固定类型外,还可以跟随任意数量的参数. 显然,其本质在于第二个参数-格式字符串. printf()和sprintf()都使用格式字符串来指定字符串的格式. 在格式字符串中,使用一些以“%”开头的格式规范(格式规范)来占据位置. 提供相应的变量,最终函数将用相应位置的变量替换说明符,以生成调用者想要的字符串.
sprintf()的最常见应用之一是将整数打印到字符串,例如:
sprintf的作用是将格式化的字符串输出到目标字符串,而printf的作用是将格式化的字符串输出到屏幕. sprintf的第一个参数应该是目标字符串. 如果未指定此参数,则在执行过程中会出现提示“此程序执行了非法操作,将被关闭...”.
sprintf()将根据参数格式字符串转换并格式化数据,然后将结果复制到参数str指向的字符串数组中,直到出现字符串末尾('\ 0'). 参数格式字符串的格式请参考printf().
[返回值]如果成功,则返回参数str的字符串长度;如果失败,则返回-1.
注意: 在数组上进行操作时,C语言无法检测到数组的长度. 如果str的长度不够,则sprintf()可能会导致缓冲区溢出并带来意外的后果. 黑客经常使用此漏洞来查看安全的系统. 请参见下面的代码:
#include <stdio.h>
main()
{
char buf[10];
sprintf(buf, "The length of the string is more than 10");
printf("%s", buf);
}
编译并运行,屏幕显示“字符串的长度大于10”,并且系统提示程序已停止. 原因是要写入的字符串的长度超过了buf的长度,从而导致缓冲区溢出.
使用snprintf()代替sprintf()将解决此问题.
[示例]打印字母a的ASCII值.
#include <stdio.h>
main()
{
char a = 'a';
char buf[80];
sprintf(buf, "The ASCII code of a is %d.", a);
printf("%s", buf);
}
运行结果:
The ASCII code of a is 97.
另一个例子,在100内生成10个随机数并输出.
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
char str[100];
int offset =0;
int i=0;
srand(time(0)); // *随机
for(i = 0;i<10;i++)
{
offset+=sprintf(str+offset,"%d,",rand()0); // 格式化的数据写入字符串
}
str[offset-1]='\n';
printf(str);
return 0;
}
运行结果:
74,43,95,95,44,90,70,23,66,84
该示例使用新函数srand(),该函数可以生成随机数. 该示例中最复杂的部分是每次在for循环中调用函数sprintf()将数据写入字符数组时,str + foffset是每个写入数据的起始地址c语言中printf输出格式,最终结果是所有随机数据生成的数据是整数,存储在数组中.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-176837-1.html
既然“这两个涉及到美国自身的安全
靠分红成吗