printf的格式控制符
%d 十进制有符号整数
%ld 长整形
%u 十进制无符号整数
%f 浮点数
%s 字符串
%c 单个字符
%p 指针的值
%e 指数形式的浮点数
%x, %X 无符号以十六进制表示的整数
%0 无符号以八进制表示的整数
%g 自动选择合适的表示法
(1). 可以在"%"和字母之间插进数字表示最大场宽,插入- 表示左对齐,默认右对齐
C语言momalloc动态分配的内存记得初始化,分配函数不负责初始化的。
free之后的指针必须置为0,不然成为野指针,gg
多维数组动态分配从低到高,释放从高到低。
在函数中也可以使用extern
文件操作
C语言的文件结构体 FILE,基本上就是操作系统文件节点的结构体的封装。
FILE * f = fopen(name, mode);
控制读写权限的字符串(必须指明)
打开方式 说明
“r” 以“只读”方式打开文件。只允许读取,不允许写入。文件必须存在,否则打开失败。
“w” 以“写入”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。
“a” 以“追加”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。
“r+” 以“读写”方式打开文件。既可以读取也可以写入,也就是随意更新文件。文件必须存在,否则打开失败。
“w+” 以“写入/更新”方式打开文件,相当于w和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。
“a+” 以“追加/更新”方式打开文件,相当于a和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。
还有一个读写形式:
控制读写方式的字符串(可以不写)
打开方式 说明
“t” 文本文件。如果不写,默认为"t"。
“b” 二进制文件。
相应函数:
直接对文件读写字符fgetc§、fputc(c,p)
读字符串函数 fgets、fputs等
char *fgets ( char *str, int n, FILE *fp );读取到的字符串会在末尾自动添加 ‘\0’,n 个字符也包括 ‘\0’。n表示最大值,不一定读n个,在读取到 n-1 个字符之前如果出现了换行,或者读到了文件末尾,则读取结束。
还有fread、fwrite、fprintf、fscanf等格式化读取,fseek定位
打开文件之后,利用这些函数即可完成文件的读写。
还有一种特别的方式,重定向IO,使用freopen函数,在里面加上第三个参数stdin或者stdout,即可把对控制台的IO转移到文件中。
这样打开之后关闭文件不再是关闭文件指针,直接关闭stdin或者stdout;应该是包含写的都能用stdout,包含读的都能用stdin。
字符串
memset(指针p,值x,长度n);在string.h中的效果是将指针p往后n个长度的内存的赋值为值x,内部应该是按字节赋值的,所以对以char为单位的字符串相当于全部赋值为x,如果是整数的话,赋0可以,其它的值就不行了。
字符’\0’的值就是0;
strlen返回值不包括’\0’的长度。
数组名和指正还是有一定的区别,这里就是,把数组名当参数传递给指针,如int *a, 此时调用sizeof(a),只能的到指针长度,不能的到数组长度,即memset无效,gg;