C语言|《C Primer Plus》读书笔记
1|0字符串和字符串函数
1|1字符串数组初始化:
1|2旧I/O函数:
gets() 读取整行输入,直到遇到换行符,然后丢弃换行符。
puts() 用于显示字符串,并在末尾添加换行符。
1|3新I/O函数:
fgets()第1个参数为写入的字符数组名称。
fgets()函数通过第2个参数(例如n)限制读入的字符数来解决溢出问题。
fgets()将读取n-1个字符或遇到第一个换行符为止。fgets()读到的换行会存在字符串中。
fgets()第3个函数指明要读入的文件。如果用stdin 可表示从键盘输入,stdout表示从命令行输出。
gets_s()函数不需要第三个参数,但没fgets()方便
终极版本——s_gets函数,读取整行输出并用空字符代替换行符。(或者读取一部分输出,丢弃剩余一部分。
1|4 自定义输入/输出函数:
一般可采用getchar() 和 putchar() 配合循环whlie(*str)来定制I/O函数。
1|5字符串函数:
主要涉及四种字符串函数及其变种。
查询长度strlen()
拼接字符串strcat()
strcat()接收两个字符串作为参数,把第二个字符串拼接在第一个字符串的末尾。
strncar()函数第三个参数指定了最大添加字符数,确保安全性(第一个字符串可能不够大来容纳第二个字符串)
比较字符串strcmp()
如果两个字符串参数相同,返回0,否则返回非零值。(非零值都为真)
常用测试条件:
strncmp()第三个参数可限定查找的字符数:
复制字符串strcpy()
直接拷贝字符串是不可行的。
正确方法:
strncpy(target, source, n)的第三个参数指明可拷贝的最大字符数
写入字符串sprintf()
1|6ctype.h 字符函数
其他自搜可用。
1|7命令行参数
main()后两个参数,需要在命令行下调用,不太会用。
1|8实例应用:字符串排序
选择排序算法:
2|0存储类别,链接和内存管理
本章难度很大,不是很理解。
2|1部分概念:
作用域
作用域有:块作用域,函数作用域,函数原型作用域或文件作用域。
块作用域:声明在语句块中的变量,在语句块内可见
函数作用域::声明在函数中的变量,函数体内可见
函数原型作用域:仅仅在函数原型的那个括号()里面可见。
文件作用域: 变量定义在函数的外面,从定义到文件末尾可见
链接
C变量有3种链接属性:外部链接、内部链接和无链接。块作用域、函数作用域和函数原型作用域的变量都是无链接变量。
具有文件作用域的变量可以时外部链接或内部链接,外部链接可在多文件程序中使用,内部链接只能在当前单元使用。
存储类别说明符static可区分内部链接和外部链接:
int a = 6; //外部链接
static int b = 5; //内部链接
static实例:函数调用计数。该代码避免了使用全局变量,提高安全性。
存储期
存储期描述了对象的生存期。(不太懂)
C对象有4种存储期:静态存储期、线程存储期、自动存储期、动态分配存储期。
静态存储期: 静态存储期的对象在程序执行期间一直存在。文件作用域变量具有静态存储期。
线程存储期:用于并发程序设计,程序执行可分为多个线程。具有线程存储期的对象,从被声明至线程结束期间存在。
以关键字_Thread_local 声明一个对象时,每个线程都获得该变量的私有备份。
自动存储期:块作用域变量通常具有自动存储期。内存自动分配和释放。 块作用域变量在前面加上static可以变长静态存储期。
2|2随机数及实例
rand()函数
实例:
生成1000个1-10的随机数,统计其出现次数并打印。
2|3malloc()函数和free()函数
malloc()分配内存,可用来创建数组。
free()释放内存
例1:要求输入元素个数及元素值,采用malloc()函数为其设置数组并赋值
输出结果:
例2:要求输入指定数量(n)个单词,将其存放并逐词输出。
输出结果:
3|0文件输入输出
3|1fopen函数
该函数声明在stdio.h
中,它的第一个参数是待打开文件的名称(确切的说是一个包含该文件名的字符串地址),第二个参数是一个字符串,指定待打开文件的模式:
程序成功打开文件后,fopen()
将返回文件指针file pointer
,其他I/O函数可以使用这个指针指向该文件。
3|2getc()和putc()函数
这两个函数与getchar()
和putchar()
类似,但是要告诉这两个函数使用哪一个文件。
3|3fclose()函数
fclose(fp)
函数关闭fp
指定的文件,必要时刷新缓冲区。对于较正式的程序,应该检查是否成功关闭文件。如果成功关闭,fclose()
函数返回0,否则返回EOF。
3|4指向标准文件的指针
3|5随机访问:fseek()和ftell()
有了fseek()
函数,就可以把文件看成数组,在fopen()
打开的文件中直接移动到任意字节处。
3|6fprintf()和fscanf()函数
__EOF__
本文链接:https://www.cnblogs.com/alion/p/16056254.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)