间接 标准 统一 机制 策略
iTerm 的配置
将iTerm移到应用程序
进入配置文件
|
|
ls 查看当前目录下的所有文件
拷贝当前目录下的文件 zshrc.zsh-template 到~/.zshrc 下
|
|
- 退出iterm,重启即可
|
|
VI编辑器中的基本命令
VI编辑器中的基本内部命令
在终端使用 vimtutor 命令可以查看VI编辑器中的基本命令
复制命令
复制单个字符: y
复制一个单词: yw
复制所选中的一行: yy
移动命令
移动光标到行首: ^向前移动一个单词: b
向后移动一个单词: w
向下翻一页: ctrl + f
向上翻一页: ctrl + b
d + ^ 删除光标所在位置到行首的所有字符
- d + $ 删除光标所在位置到行尾的所有字符
VI编辑器中的基本外部命令
删除命令
* rm [filename] 删除基本文件 * rm -r [filename] 有提示的删除一个文件夹 * rm -rf [filename] 强制删除文件夹,包括文件夹内的所有子文件夹以及自文件,且无提示 * rm \*~ (*为通配符),即删除所有以~结尾的文件
拷贝命令
* 若file2文件家不存在,默认将file1 拷贝一分命名为file2 * 若file2时文件夹,默认将file1拷贝到文件夹file2下,且名字仍为file1 * file1 file2 不加路径的情况下,默认是把当前路径下的文件拷贝到当前路径下 * ile1 file2 表示为路径的形式,则是把指定路径下的file1 拷贝到指定路径下命名为file2,或是拷贝到制定路径下的file2文件夹下命名仍然是file1 * cp -r/R [file1][file2] * 将文件夹1拷贝到文件夹2目录下
重命名(移动命令)
mv [file1][file2]
- 若两文件在同一路径下且file2文件家不存在,默认将file1 重命名为file2
- 若file2时文件夹,默认将file1移动到文件夹file2下,且名字仍为file1
- file1 file2 不加路径的情况下,默认是把当前路径下的文件重命名为file2
- file1 file2 表示为路径的形式,则是把指定路径下的file1 移动到指定路径下命名为file2,或是移动到指定路径下的file2文件夹下命名仍然是file1
其他命令
- ls -a列出当前目录下的所有文件及文件夹,包括隐藏文件(以 “.” 开始的文件或文件夹)其中 . 和 ..两个文件夹表示是当前路径和上级路径
- cd 切换路径
- du -h [filename] 默认为查看当前路径下人类可读的文件的大小,追加filename,则是查看该文件夹下的人类可读的文件的大小
- diff [file1][file2]比较两个文件内容是否相同,相同的话无显示结果;不同的话,则列出不同之处
- file [file] 查看该文件的类型(如二进制类型,ASCII,English等)
- !!调出上次使用的命令
! + 使用过的命令的首字母后第一个单词,调出最近使用过包含该字母或单词的命令
ctrl + r 搜索使用过的命令
ctrl + c 结束当前输入的命令,即不执行当前输入的命令 - gcc 执行命令时 加-g 可进行调试 (l 列出函数的源代码,b 设置断点,r 运行程序,n 执行下一步,s 进入函数内部,p [var] 打印变量var的值 q 退出程序 ), 加 -save-temps 保留编译时生成的结果(即 .i, .s, .o 文件生成且被保留下来可供查看)
- $?(echo $? 在屏幕上显示上次命令执行的结果,若执行成功则返回0,否则返回1;若上次执行是程序且执行成功则返回return 后的返回值)
echo $HOME 显示当前的home路径
echo $USER 显示当前的用户名 - cat [filename] | head 查看文件的前十行内容
注释方法
- // 注释一行
注释多行
- /*…*/
#if 0
…
#else
…
#endif
注释从 if 0 到else之间的多行,程序在编译,只编译else与endif之间的多行;若果把0换成非零值,则只
头文件的保护
#ifndef [宏名]
#define [宏名]
…
#endif
在引用头文件时,如果未定义头文件内已定义过的内容,则定义;否则,不再重复定义
变量的作用范围
- 函数作用域 仅限在一个函数中使用
- 文件作用域 仅限在一个文件中使用
- 代码快作用域 受限与“ {}” 的限制
- 原型作用域 函数声明
变量的大小
- char c 语言标准规定为1字节
- int 一般为4字节 规定int的大小不超过long的大小,short的大小不超过int的大小
- 指针的大小与long的大小等于机器字长(即 32位os 其大小为4字节,64的os其大小为8字节),古可用sizeof(int)测试机器os时多少位的(sizeof只是一个操作符,并不是一个函数)。
数据类型
- 整型:char short int long
- 浮点型: float double
- 指针
- 聚合类型:数组,结构体,枚举类型
- 派生类型:字符串,联合体
赋值操作 值得注意点
- 数组名是个地址,只能在初始化是对其赋值,在以后使用中,数组名是个地址常量,不能被作为左值对其赋值
- 对字符数组初始化赋值为字符串字面常量,相当于把全局数据段的字符串复制到栈对字符数组分配的地址中去。
- 指针是指针变量可以对其进行赋值运算
- 结构体类型的变量可以作为左值对其进行赋值
分配内存问题
- 在函数中定义变量,对其分配内存时不能太大
- 可使用全局变量在全局数据段分配大内存
- 可使用malloc(size)动态在堆中分配大内存,使用memset将申请的内存初始化。
字符串操作中段错误
- 定义一个指向NULL地址的字符串指针
NULL的ascii值为0,地址为0的内存不可以被访问,故对该地址进行写操作是没有权限的。 - 在定义一个字符串数组时对其进行初始化为字符串字面常量
对字符串数组定义并初始化为一个字符串字面常量时,字符数组首地址指向的是全局数据段的地址,对该段内存进行写操作是没有全县的。 - 使用strcpy,strcat,strcmp,strcasecmp等字符串操作函数,将目标字符串读/写爆。应该使用strncpy,strncat,strncmp,strncasecmp等字符串操作函数防止读写越界。
文件操作常用函数
- 字符读写 fgetc(FILE *fp);
|
|
- 按行读写 fgets(char str,size,FILE \fp);
|
|
- 数据块读写 fread(char *,size,number,FILE *fp);
|
|
- 格式化读写 fprintf(FILE *fp,format,…);
|
|
三种缓冲机制
- 行缓冲 缓冲区存储一行信息才进行输出 eg:stdout(标准输出)
- 全缓冲 缓冲区存储满信息才进行输出
- 无缓冲 缓冲区只要有信息存储进去就进行输出 eg:stderr(报错)
改变文件指针位置
- rewind(FILE *fp); 改变指针指向头文件
- fseek(FILE *fp,int length,long where);(where 可取值为SEEK_SET SEEK_CUR SEEK_END) 改变指针位置从(文件头部,当前位置,文件尾部)移动length个字节的位置