大纲:
- bool类型
- 文件结构(.h头文件,.c文件)
- 头文件要有ifndef定义防止多次嵌套引入
- 接收命令行参数
- File I/O
- 读文件(按行读)
- 写文件
- 内存分配
- 结构体和定义类型 typedef
1. bool类型
需要引入头文件:stdbool.h
|
Refer:Use of bool in C - GeeksforGeeks
2. 文件结构
这里有一个模板。
文件名:book.h
|
文件名:book.c
|
3. 命令行参数
很简单,main的两个参数 int argc
表示参数的个数(注意的是程序名字也占一个参数),char** argv
接收的是具体的参数字符串。所以,程序名字:argv[0], 程序的实际第一个参数是:argv[1]。实际使用如下:
int main(int argc, char** argv) { |
4. 文件读写 File IO
具体包括打开文件,关闭文件。读文件,写文件。
fopen/fclose; fgets/fscanf/fgetc/getline; fputs/fputc/fprintf
Refer: C - File I/O
// 打开文件 |
4.1. 读文件
通过fgets
读取到字符数组,缺点是:当一行很长时,只会读取一行的部分,而不是完整的行。
原型:char *fgets(char *str, int n, FILE *stream)
char buff[255]; |
通过 fscanf
格式化读入变量,优点,方便读取各种数据类型
char s[255]; |
通过 getline 非标准的C函数来读取一行,可以完整读入一行
getline(&buffer,&size,stdin);
The latest and most trendy function for reading a string of text is getline(). It’s a new C library function, having appeared around 2010 or so.
char* buf = (char*)malloc(sizeof(char)*6); |
※ 注意要使用size_t类型定义getline的第二个参数,以及返回值。然后输出时,使用%zu表示无符号long类型。
The getline() Function | C For Dummies Blog
阅读:puts 和 printf 的细微区别
Refer:puts() vs printf() for printing a string - GeeksforGeeks
4.2. 写文件
跟读文件对应的。
通过fputs
写字符串, 或者使用 fprintf
格式化输出。注意: 如果需要换行的话,需要手动添加\n。
原型: int fputs ( const char * str, FILE * stream );
原型: int fprintf ( FILE * stream, const char * format, … );
fputs("Hello 123\n", fp); // 换行 |
Refer:fputs - C++ Reference
Refer:fprintf - C++ Reference
5. 内存分配
引入头文件: stdlib.h
/* malloc, free, rand */
calloc相比malloc,它除了分配内存空间外,还会将内存空间的值清零。
realloc会调整内存大小,同时会复制内存中的值到新内存空间。
原型:void* malloc (size_t size);
原型:void free (void* ptr);
原型:void* calloc (size_t num, size_t size);
原型: void* realloc (void* ptr, size_t size);
使用malloc开辟空间时,一般用sizeof获取要存储的单元大小,同时对结果进行强类型转换。
typedef struct _Book { |
6. 结构体和类型定义
typedef struct _Book { |