紧接上文
案例:学习字符串的多种输入输出函数,以及字符串常见处理函数
char 类型,默认值就是 '\0',它表示字符串的结束符。这是 C 语言中处理字符串的一种约定,以 '\0' 作为字符串的结束标志,方便对字符串进行操作和处理。
所以,在这种初始化方式下,str 数组的第一个元素被显式地初始化为 '\0',而其余 127 个元素会自动被初始化为 '\0',使得整个数组初始时表示一个空字符串。这样的初始化方式可以确保数组在使用前处于一个确定的状态,避免未初始化的内存带来的潜在问题。
scanf("%s", str):用于从标准输入读取一个字符串,遇到空白字符(如空格、制表符、换行符)就会停止读取,并将读取的字符串存储到 str 数组中。
gets(str):从标准输入读取一行字符串,直到遇到换行符为止。它会将读取的字符(不包括换行符)存储到 str 数组中,并在字符串末尾自动添加 '\0'。不过,gets 函数存在安全风险,因为它不会检查输入字符串的长度,可能导致缓冲区溢出。gets 函数存在安全隐患,在实际编程中建议使用更安全的 fgets 函数来替代。
strcpy(str, p):将 p 所指向的字符串复制到 str 数组中。
strncpy(str, p, 6):将 p 所指向的字符串的前 6 个字符复制到 str 数组中。如果复制的字符数不足 6 个,不会自动添加 '\0';如果超过 6 个,则只复制前 6 个字符。
拷贝操作会覆盖目标字符串原来的内容
自己实现strcpy和strncpy函数(面试喜欢拷打)
关于这部分内容我也有放在另外一个专栏里面
要知道字符串最后面都是会有一个'\0'为结束符的
char arr[5]={1,2,3,4,5};这个可不是字符串,这个只是个普通的字符数组
char arr[6] = {1, 2, 3, 4, 5, '\0'};这个是字符串,数组 arr 会在最后位置存储一个 '\0',使其成为一个合法的 C 字符串。
des++ 操作会使指针先移动到最后一个有效字符后面的下一个位置。
*des = '\0' 会将 \0 放到这个新位置,即最后一个有效字符后面的那个位置。
如果src全部取完之后 des和src的指针也会继续往后偏移一位,然后不成立*src!='\0'&& count>0这个条件之后,执行*des='\0';然后就满足字符串最后以\0为结束的特点了
assert断言(面试拷打点)
字符串的拼接操作strcat以及自我实现
- 字符串拷贝:直接从目标字符串的起始位置开始覆盖写入源字符串内容,不需要遍历目标字符串。
- 字符串拼接:需要先将目标字符串的指针移动到其末尾,然后再添加源字符串的内容,因此需要先遍历目标字符串。
字符串比较strcmp函数的使用和strcpm函数的自我实现
要点
第一个while:此 while 循环的目的是逐个字符比较 str1 和 str2 所指向的字符串,直到满足以下条件之一时停止:
- 其中一个字符串到达结束符 '\0'。
- 两个字符串对应位置的字符不相等。
第二个if:若 *str1 或者 *str2 为 true,就把 str1 和 str2 指针重置为初始位置(bakStr1 和 bakStr2),然后分别遍历两个字符串,将每个字符的 ASCII 码值累加到 n_str1 和 n_str2 中。
第三个while:这两个 while 循环分别用于遍历 str1 和 str2 所指向的字符串,将每个字符的 ASCII 码值累加到 n_str1 和 n_str2 中,直到遇到字符串结束符 '\0' 为止。
下一章就到结构体了,加油!