C语言字符串学习笔记
摘要
C字符串函数,有必要好好学习,对一些字符串的处理,用正确的函数很重要。
- 获取字符串的长度:strlen 函数
- 拷贝字符串:strcpy函数和 strncpy函数
- 连接字符串:strcat 函数和 strncat 函数
- 比较字符串:strcmp 函数和 strncmp 函数
strcpy字符串复制
1 |
|
结果应该是只打印 New 这个字符串。可能会觉得 str1 的长度比 str2 长,调用 strcpy 函数后会只覆盖前边的内容,后边保留……但事实上并不是这样,因为 strcpy 函数复制 str2 的时候,会将该字符串最后的 ‘\0’ 也一并复制过去。如图:
strncpy字符串复制
1 |
|
输出为:
1 |
|
参数 | 含义 |
---|---|
dest | 指向存放字符串的目标数组 |
src | 指向待拷贝的源字符串 |
n | 指定拷贝的最大长度 |
和 strcpy 函数一样,strncpy(dest, src, n) 函数将拷贝源字符串的 n 个字符到目标数组中。如果源字符串的长度小于 n,那么就用 ‘\0’ 填充额外的空间。如果源字符串的长度大于或等于 n,那么只有 n 个字符被拷贝到目标数组中(注意:这样的话将不会以结束符 ‘\0’ 结尾)。
为了使该函数更“安全”,建议使用 dest[sizeof(dest) - 1] = ‘\0’; 语句确保目标字符串是以 ‘\0’ 结尾.
sizeof运算符&strlen字符串长度
1 |
|
该程序输出sizeof str = 21
strlen str = 7
sizeof 运算符是取得字符串的尺寸,即该字符串所处存储空间的大小。
代码开头的 char str[] = "I love mjclouds.com!"
决定了该字符数组的尺寸。而字符串的长度则是由第一个遇到的结束符(’\0’)所定义的。只要编译器读取到结束符\0
,它不管你字符数组后边是否有其它内容,都会认为字符串已经结束。
strcat连接字符串
1 |
|
输出是:
1 |
|
**strcat(dest, src) **
参数 | 含义 |
---|---|
dest | 指向用于存放字符串的目标数组,它应该包含一个字符串,并且提供足够容纳连接后的总字符串长度的空间(包含结束符 ‘\0’) |
scr | 指向待连接的源字符串,该参数不应该与 dest 参数指向的位置发生重叠 |
strcat 函数用于连接两个字符串。
将源字符串拷贝并连接到目标数组存放的字符串后边,此过程将覆盖第一个参数的结束符 ‘\0’。
两个参数的位置不应该重叠。
strncat连接字符串
1 |
|
输出为:
1 |
|
strncat(dest, src, n)
参数 | 含义 |
---|---|
dest | 指向用于存放字符串的目标数组,它应该包含一个字符串,并且提供足够容纳连接后的总字符串长度的空间(包含结束符 ‘\0’) |
src | 指向待连接的源字符串,该参数不应该与 dest 参数指向的位置发生重叠 |
n | 指定待连接的源字符串的最大长度 |
strncat 函数用于拷贝源字符串中的 n 个字符到目标数组的字符串后边,并在末尾添加结束符 ‘\0’。
如果源字符串的长度小于 n,那么不会像 strncpy 函数那样使用 ‘\0’ 进行填充(但结束符 ‘\0’ 还是有的)。
另外,目标数组中的原有的字符串并不算在 n 中。
strcmp 比较字符串&strncmp比较字符串
1 |
|
输出为:
1 |
|
strcmp(s1, s2)
(str1, str2, n)
参数 | 含义 |
---|---|
s1 | 指向待比较的字符串 1 |
s2 | 指向待比较的字符串 2 |
n | 指定待比较的字符数 |
strcmp 函数用于比较两个字符串。
该函数从第一个字符开始,依次比较每个字符的 ASCII 码大小,直到发现两个字符不相等或抵达结束符(’\0’)为止。
返回值<0,意思是 字符串 1 的字符小于字符串 2 对应位置的字符;
返回值=0,意思是 字符串 1 的字符等于字符串 2 对应位置的字符;
返回值>0,意思是 字符串 1 的字符大于字符串 2 对应位置的字符;
strncmp 函数用于比较两个字符串的前 n 个字符。
该函数从第一个字符开始,依次比较每个字符的 ASCII 码大小,发现两个字符不相等或抵达结束符(’\0’)为止,或者前 n 个字符完全一样,也会停止比较。
返回值类型同strcmp
参考文章:
参考链接