好的,我给你整理一个比较全面的总结,把你想要的各类内容都列出来,方便你复习或者快速查阅。内容会尽量具体,包括函数、用法和返回值说明。
1. C语言 <stdio.h> 函数总结
stdio.h 是标准输入输出库,主要用于控制台和文件的输入输出。常用函数如下:
1.1 标准输入输出
| 函数 |
用法 |
返回值 |
说明 |
printf |
printf("format", args...) |
输出字符数 |
格式化输出到屏幕 |
scanf |
scanf("format", &var...) |
成功匹配输入项数 |
从标准输入读取数据 |
getchar |
int c = getchar(); |
读取的字符(int),EOF(-1) 表示结束 |
从 stdin 读取一个字符 |
putchar |
putchar(c); |
输出字符,返回输出的字符 |
输出一个字符到 stdout |
gets (已废弃) |
char str[100]; gets(str); |
返回 str 地址 |
从 stdin 读取一行,不安全 |
puts |
puts(str); |
非负数表示成功 |
输出字符串并换行 |
1.2 文件操作
| 函数 |
用法 |
返回值 |
说明 |
fopen |
FILE *fp = fopen("file","mode"); |
文件指针 |
打开文件,模式如 "r","w","a","rb","wb" |
fclose |
fclose(fp); |
0 成功,EOF 失败 |
关闭文件 |
fgetc |
c = fgetc(fp); |
读取字符,EOF 表示结束 |
从文件读取字符 |
fputc |
fputc(c, fp); |
输出字符 |
向文件写入字符 |
fgets |
fgets(buf, n, fp); |
buf地址,EOF/NULL 表示失败 |
从文件读取一行 |
fputs |
fputs(str, fp); |
非负数成功 |
向文件写入字符串 |
fprintf |
fprintf(fp, "format", args...); |
输出字符数 |
格式化输出到文件 |
fscanf |
fscanf(fp, "format", &var...); |
成功匹配输入项数 |
从文件读取格式化数据 |
feof |
feof(fp) |
非零表示 EOF |
检测是否到文件末尾 |
ferror |
ferror(fp) |
非零表示出错 |
检测文件错误 |
1.3 其他
| 函数 |
用法 |
返回值 |
说明 |
rewind |
rewind(fp); |
void |
文件指针回到开头 |
ftell |
long pos = ftell(fp); |
当前偏移量 |
获取文件当前位置 |
fseek |
fseek(fp, offset, origin); |
0成功,非0失败 |
文件指针移动 |
clearerr |
clearerr(fp); |
void |
清除错误标志和 EOF 标志 |
2. C语言 <stdlib.h> 函数总结
stdlib.h 主要是通用工具函数,包括动态内存、随机数、程序控制等。
2.1 动态内存管理
| 函数 |
用法 |
返回值 |
说明 |
malloc |
ptr = malloc(n); |
指针,NULL 表示失败 |
分配 n 字节内存 |
calloc |
ptr = calloc(n, size); |
指针,NULL 表示失败 |
分配 n 个 size 大小的内存,初始化为 0 |
realloc |
ptr = realloc(ptr, new_size); |
指针,NULL 表示失败 |
重新分配内存 |
free |
free(ptr); |
void |
释放内存 |
2.2 程序控制
| 函数 |
用法 |
返回值 |
说明 |
exit |
exit(status); |
void |
终止程序,status 通常 0 表示成功 |
atexit |
atexit(func); |
0成功 |
注册程序结束时执行的函数 |
2.3 字符转换与数学
| 函数 |
用法 |
返回值 |
说明 |
atoi |
int x = atoi(str); |
转换整数 |
字符串转 int |
atof |
double d = atof(str); |
转换浮点 |
字符串转 double |
atol |
long l = atol(str); |
转换长整数 |
字符串转 long |
strtol |
long l = strtol(str, &endptr, base); |
long |
更安全的字符串转 long |
rand |
int r = rand(); |
0~RAND_MAX |
生成随机数 |
srand |
srand(seed); |
void |
设置随机数种子 |
3. C语言 <string.h> 函数总结
string.h 主要处理字符串和内存块操作,是 C 编程重点。
3.1 字符串操作
| 函数 |
用法 |
返回值 |
说明 |
strlen |
size_t n = strlen(str); |
字符数,不含 \0 |
计算字符串长度 |
strcpy |
strcpy(dest, src); |
dest |
字符串拷贝 |
strncpy |
strncpy(dest, src, n); |
dest |
拷贝前 n 个字符,未自动加 '\0' |
strcat |
strcat(dest, src); |
dest |
拼接字符串 |
strncat |
strncat(dest, src, n); |
dest |
拼接前 n 个字符 |
strcmp |
strcmp(s1, s2); |
<0 s1<s2, 0=s1=s2, >0 s1>s2 |
比较字符串 |
strncmp |
strncmp(s1, s2, n); |
同上 |
比较前 n 个字符 |
strchr |
char *p = strchr(str, c); |
指向首次出现的字符 |
查找字符 |
strrchr |
char *p = strrchr(str, c); |
指向最后一次出现的字符 |
查找字符 |
strstr |
char *p = strstr(hay, needle); |
指向首次出现的子串 |
查找子串 |
strspn |
size_t n = strspn(str, set); |
长度 |
前面连续匹配 set 的长度 |
strcspn |
size_t n = strcspn(str, set); |
长度 |
前面连续不含 set 的长度 |
strpbrk |
char *p = strpbrk(str, set); |
指向首次匹配字符 |
查找任意字符 |
3.2 内存操作
| 函数 |
用法 |
返回值 |
说明 |
memset |
memset(ptr, val, n); |
ptr |
设置内存 n 个字节为 val |
memcpy |
memcpy(dest, src, n); |
dest |
内存拷贝 n 字节 |
memmove |
memmove(dest, src, n); |
dest |
内存拷贝 n 字节,允许重叠 |
memcmp |
memcmp(p1, p2, n); |
<0 p1<p2,0=p1=p2,>0 p1>p2 |
内存比较 n 字节 |
重点:C 里的字符串是以 \0 结尾的字符数组,所以要注意边界和 '\0' 的处理。
4. C语言结构体使用
4.1 定义
4.2 变量声明
4.3 访问成员
4.4 指针访问
4.5 嵌套结构体
4.6 typedef 简化
5. C语言其他特性(区别于 C++)
- 没有类和继承:C 只有结构体和函数组合。
- 没有函数重载:函数名必须唯一。
- 没有引用:只有指针传递。
- 没有命名空间:变量和函数全局唯一。
- 动态内存手动管理:
malloc/free,没有 new/delete。
- 标准库函数少:没有
iostream、string 类等。
- C风格字符串:
char[] + \0,而非 std::string。
- 枚举默认 int 类型,没有类枚举。
- 宏和预处理器:
#define、#ifdef 常用,C++ 尽量用 const、inline 替代。
- 函数指针使用更普遍。
6. C语言小技巧
- 安全字符串操作:
- 交换两个变量:
- 宏定义调试
- 数组长度计算
- 快速判断奇偶
- 使用
do{ } while(0) 封装宏 防止意外
- 指针技巧
- 避免魔法数字
如果你需要,我可以帮你画一张 C标准库函数总表图,把 stdio.h、stdlib.h、string.h 的函数和返回值一目了然地列出来,做成速查表。
你想让我帮你画这个表吗?