前言
- 本人系小白,这篇文档只是为了归纳和分享学习中的函数相关的知识点,您若发现其中有出现的错误,请及时留言,万分感谢
- 电脑端浏览器快速查找指定函数
Ctrl+F 函数名
例如:
Ctrl+F printf() - 所描述的函数内容主要有一下几点,不断跟新,不断补充,有建议请留言,有补充请留言,欢迎大家指出其中的不足,万分感谢
函数名 | - |
---|---|
描述 | 函数的功能描述 |
函数原型 | 所在的头文件以及函数的声明 |
返回值 | 函数成功或失败的返回值 |
参数 | 对函数原型中的参数列表中的参数做出的解释 |
备注 | 一些函数的其他信息 |
作用 | 也就是使用场景 |
示例代码 | 代码片 |
运行结果 | ubuntu下代码的运行结果 |
其他 | 更新时间/贡献者ID |
以printf为例具体格式
printf()
描述
将一个C字符串写入标准输出流(stdout),如果字符串中包含占位符(说明符以%d开头),则将参数列表中对应的参数按格式说明符进行格式化,将格式化后的参数信息插入C字符串,最后将整个字符串写入标准输出流(stdout)
函数原型
#include<stdio.h>
int printf(const char *format, ...);
返回值
成功返回写入的字节数
失败返回负数
参数
const char *format
:这是 C 字符串,它可以包含嵌入的 format 格式说明符,format 格式说明符可被随后的附加参数中指定的值替换...
:格式说明符对应的附加参数列表,根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。
备注
-
格式说明原型:
%[flags][width][.precision][length]specifier
%[标志][宽度][精度.][长度]说明符 -
说明符specifier
说明符 | 输出量 | 输出结果 |
---|---|---|
%d 或 i | 有符号十进制整数(整数不输出符号) | 392 |
%u | 无符号十进制整数 | 7235 |
lu | 32位无符号整数 | |
llu | 64位无符号整数 | |
%o | 无符号八进制 | 610 |
%x/%X | 无符号十六进制整数 | 7fa/7FA |
%f/%F | 十进制浮点,小写 | 392.65 |
%e/%E | 科学计数法(尾数/指数) | 3.9265e + 2/3.9265E + 2 |
%g/%G | 以%f或%e中较短的输出宽度输出单、双精度实 | 392.65 |
%a/%A | 十六进制浮点 | -0xc.90fep-2/-0XC.90FEP-2 |
%c | 单个字符 | a |
%s | 字符串 | sample |
%p | 指针地址 | b8000000 |
%n | 什么都没打印 | |
%% | 向流中写入单个% | % |
- 补充标志[flags]
标识 | 描述 |
---|---|
+ | 强制在前面显式正负号(+/-),默认只有负数显式负号 |
- | "-"右对齐,默认情况下左对齐 |
space | 如果在值之前有一个空格,则会在输出值之前插入一个空格 |
# | 与o联用%#o 会在输出的八进制数前补充一个0,表示8进制数;与x/X联用%#x/%#X 会在输出的十六进制数前补充0x/0X,表示十六进制数 |
0 | 指定使用0填充,默认用空格填充 |
- 宽度[width]
width | 描述 |
---|---|
number | 指定最少要打印的字符数(宽度),如果打印的字符数小于number则会用空格填充,如果要打印的字符数大于number,则会全部输出,不会发生截断 |
* | 至少要打印的字符数(宽度)未在说明符中指定,而是作为必须格式化的参数之前的一个附加整数值参数printf("%*d",5,i); |
- 精度[.precision]
.precision | 描述 |
---|---|
.number | ①对于整数说明符(d、i、o、u、x、X):precision 指定了要写入的数字的最小位数。如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。精度为 0 意味着不写入任何字符; ②对于 e、E 和 f 说明符:要在小数点后输出的小数位数; ③对于 g 和 G 说明符:要输出的最大有效位数; ④对于 s: 要输出的最大字符数。默认情况下,所有字符都会被输出,直到遇到末尾的空字符; ⑤对于 c 类型:没有任何影响; ⑥当未指定任何精度时,默认为 1。如果指定时不带有一个显式值,则假定为 0 |
.* | 精度在 format 字符串中未指定,但是会作为附加整数值参数放置于要被格式化的参数之前。 |
- 长度[length]
length | 描述 |
---|---|
h | 参数被解释为短整型或无符号短整型(仅适用于整数说明符:i、d、o、u、x 和 X)。 |
l | 参数被解释为长整型或无符号长整型,适用于整数说明符(i、d、o、u、x 和 X)及说明符 c(表示一个宽字符)和 s(表示宽字符字符串)。 |
L | 参数被解释为长双精度型(仅适用于浮点数说明符:e、E、f、g 和 G)。 |
作用
- 在终端打印提示信息
示例代码1
#include <stdio.h>
int main ()
{
for(int i = 65 ; i<=90; i++ ) {
printf("ASCII 值 = %d, 字符 = %c\n", i , i );
}
return 0;
}
运行结果
panda@panda:~/Desktop/code$ gcc demo.c
panda@panda:~/Desktop/code$ ./a.out
ASCII 值 = 65, 字符 = A
ASCII 值 = 66, 字符 = B
ASCII 值 = 67, 字符 = C
ASCII 值 = 68, 字符 = D
ASCII 值 = 69, 字符 = E
ASCII 值 = 70, 字符 = F
ASCII 值 = 71, 字符 = G
ASCII 值 = 72, 字符 = H
ASCII 值 = 73, 字符 = I
ASCII 值 = 74, 字符 = J
ASCII 值 = 75, 字符 = K
ASCII 值 = 76, 字符 = L
ASCII 值 = 77, 字符 = M
ASCII 值 = 78, 字符 = N
ASCII 值 = 79, 字符 = O
ASCII 值 = 80, 字符 = P
ASCII 值 = 81, 字符 = Q
ASCII 值 = 82, 字符 = R
ASCII 值 = 83, 字符 = S
ASCII 值 = 84, 字符 = T
ASCII 值 = 85, 字符 = U
ASCII 值 = 86, 字符 = V
ASCII 值 = 87, 字符 = W
ASCII 值 = 88, 字符 = X
ASCII 值 = 89, 字符 = Y
ASCII 值 = 90, 字符 = Z
示例代码2
#include <stdio.h>
int main()
{
char ch = 'A';
char str[20] = "www.runoob.com";
float flt = 10.234;
int no = 150;
double dbl = 20.123456;
printf("字符为 %c \n", ch);
printf("字符串为 %s \n" , str);
printf("浮点数为 %f \n", flt);
printf("整数为 %d\n" , no);
printf("双精度值为 %lf \n", dbl);
printf("八进制值为 %o \n", no);
printf("十六进制值为 %x \n", no);
return 0;
}
运行结果
panda@panda:~/Desktop/code$ gcc demo.c
panda@panda:~/Desktop/code$ ./a.out
字符为 A
字符串为 www.runoob.com
浮点数为 10.234000
整数为 150
双精度值为 20.123456
八进制值为 226
十六进制值为 96
常用占位符
- %d 十进制有符号整数
- %u 十进制无符号整数
- %f 浮点数
- %s 字符串
- %c 单个字符
- %p 指针的值
- %e 指数形式的浮点数
- %x, %X 无符号以十六进制表示的整数
- %o 无符号以八进制表示的整数
- %g 把输出的值按照 %e 或者 %f 类型中输出长度较小的方式输出
- %p 输出地址符
- %lu 32位无符号整数
- %llu 64位无符号整数
标准C库函数
字符串处理
文件IO流操作
fopen();
描述
打开指定文件,获取文件指针
函数原型
#include <stdio.h>
FILE *fopen(const char *pathname, const char *mode);
返回值
- 成功返回文件指针FILE*
- 失败返回NULL,并设置errno
参数
const char *pathname
: C 字符串,文件所在的路径,最好使用绝对路径const char *mode
: C 字符串,文件访问模式,访问权限
模式 | 描述 |
---|---|
“r” | 打开一个用于读取的文件。该文件必须存在。 |
“w” | 创建一个用于写入的空文件。如果文件名称与已存在的文件相同,则会删除已有文件的内容,文件被视为一个新的空文件。 |
“a” | 追加到一个文件。写操作向文件末尾追加数据。如果文件不存在,则创建文件。 |
“r+” | 打开一个用于更新的文件,可读取也可写入。该文件必须存在。 |
“w+” | 创建一个用于读写的空文件。 |
“a+” | 打开一个用于读取和追加的文件。 |
备注
- fopen() mode 和 open() flags 的关系
fopen() | open() |
---|---|
r | O_RDONLY |
w | O_WRONLY | O_CREAT | O_TRUNC |
a | O_WRONLY | O_CREAT | O_APPEND |
r+ | O_RDWR |
w+ | O_RDWR\ |
a+ | O_RDWR | O_CREAT | O_APPEND |
作用
- 通过文件指针可以对文件进行一系列操作
示例代码
#include <stdio.h>
int main()
{
char buf[512]={0};
FILE * fp;
fp = fopen ("demo.c", "r+");
if(!fp){ //错误处理
perror("fopen demo.c");
return -1;
}
fread(buf,sizeof(buf),1,fp); //将文件中的数据读取到内存
printf("%s",buf);
fclose(fp);
return 0;
}
运行结果
panda@panda:~/Desktop/code/demo$ make
gcc demo.o
panda@panda:~/Desktop/code/demo$ ./a.out
#include <stdio.h>
int main()
{
char buf[512]={0};
FILE * fp;
fp = fopen ("demo.c", "r+");
if(!fp){ //错误处理
perror("fopen demo.c");
return -1;
}
fread(buf,sizeof(buf),1,fp); //将文件中的数据读取到内存
printf("%s",buf);
fclose(fp);
return 0;
}
警 告 警告 警告
- 在打开文件时,注意对可能出现的错误结果进行判断
- 当文件不再使用时,要调用
fclose()
关闭文件指针,避免造成内存泄漏: