**C语言基础·第9章 字符串导读**
欢迎进入C语言编程中最具特色、也最容易被初学者忽视的章节——字符串。在本章之前,你已经掌握了整型、浮点型等基本数据类型,但C语言中并没有专门的“字符串类型”。字符串本质上是字符的数组,这种特殊的存在方式既赋予了它强大的灵活性,也埋下了许多潜在的陷阱。本章将通过23节内容,带你彻底理解字符串的本质,掌握其存储、处理及函数调用的核心技巧。
首先,我们需要厘清“字符”与“字符串”的根本区别。前两节《字符数组1》《字符数组2》将引导你回顾数组的基础,并引入字符串作为一种特殊的字符数组的概念。紧接着,《字符串是个啥》一节将从理论层面剖析:字符串是以空字符 `\0` 结尾的字符序列。这个看似微小的结束符,却是整个字符串系统的基石,决定了数据的边界与命运。
存储方式是本章的第一个重点。我们将深入探讨字符串的两种存在形式:以变量形式存储(字符数组)和以常量形式存放(字符串常量)。在《以变量形式存储字符串》中,你会学会如何定义、初始化以及操作字符数组,这是处理可变字符串的基础。而在《字符串以常量形式存放1/2》中,我们将揭示字符串常量存储在静态数据区的特性,以及它与字符数组在内存修改权限上的本质差异。理解这一点,对于避免后续的内存错误至关重要。
指针与字符串的关系是C语言的精髓所在。《指针变量的空间大小》虽短小,却帮你厘清指针本身的大小与它所指向内容大小的区别。随后,《字符串传参1/2/3》系列将重点讲解如何在函数间传递字符串。你需要明白,数组名在传参时退化为指针,因此函数内部对字符串的修改会直接影响原数据。这一节是打破“值传递”直觉的关键,务必反复揣摩其中的内存映射逻辑。
接下来,我们将关注字符串与数字之间的转换,这是实际开发中的高频需求。《为什么要格式化转换》回顾了类型转换的原理,而《将整形数120转为字符串“120”》则通过具体案例,展示如何利用sprintf等函数完成数值到字符串的逆向工程。反之,《将字符串“120”转为整形的120》则介绍了strtoul或atoi等函数的用法。配合《printf格式化输出字符串》和《字符串的非格式化输出函数》,你将建立起完整的“输出-输入-转换”闭环。同时,《字符串输入函数》特别警示了你使用scanf获取字符串时的缓冲区溢出风险,这是编写安全代码的第一课。
字符串处理离不开标准库的支持。《strlen函数》教你如何准确计算字符串长度(不含 `\0`);《strcpy/strncpy》和《strcat/strncat》则提供了复制与拼接的机制。这里需要特别注意“n”版本函数的重要性,它们通过指定最大拷贝长度,有效防止了缓冲区溢出攻击。最后,《strcmp/strncmp》教会你如何比较字符串内容而非地址,这是实现排序、查找等功能的基础。
最后,《字符串越位的问题》作为本章的安全警钟,提醒你手动操作内存时必须谨慎,任何越界访问都可能导致程序崩溃或安全漏洞。希望通过本章的学习,你不仅能熟练使用字符串函数,更能从内存视角深刻理解C语言的设计哲学,为后续更复杂的指针应用打下坚实基础。
课程目录
1 字符数组1 (31:47).mp4 2 字符数组2 (24:30).mp4 3 字符串是个啥 (19:04).mp4 4 以变量形式存储字符串 (35:37).mp4 5 字符串越位的问题 (15:01).mp4 6 指针变量的空间大小 (30:45).mp4 7 字符串以常量形式存放1 (27:28).mp4 8 字符串以常量形式存放2 (31:43).mp4 9 字符串传参1 (27:47).mp4 10 字符串传参2 (18:29).mp4 11 字符串传参3 (18:08).mp4 12 为什么要格式化转换 (28:18).mp4 13 表达式中自动类型转换回顾 (22:07).mp4 14 将整形数120转为字符串“120” 1 (29:35).mp4 15 将整形数120转为字符串“120” 2 (13:31).mp4 16 printf格式化输出字符串 (27:15).mp4 17 字符串的非格式化输出函数 (08:13).mp4 18 字符串输入函数 (15:46).mp4 19 将字符串“120”转为整形的120 (14:57).mp4 20 strlen函数 (30:03).mp4 21 strcpy函数和strncpy函数 (23:25).mp4 22 strcmp函数和strncmp函数 (08:21).mp4 23 strcat函数和strncat函数 (11:34).mp4






