C语言 字符函数和字符串函数(2)

目录

1.strcat函数的使用

2.strcmp函数的使用

3.strncpy函数的使用

4.strncmp函数的使用


在上篇内容中我们了解了字符函数和字符串函数的概念,也学习了strlen函数和strcpy函数,接下来

在本篇内容中也将学习4个与此类似的函数。

1.strcat函数

1.1函数功能

strcat  是C语言标准库 <string.h>  中的字符串拼接函数,作用是将源字符串(以空字符 '\0'  结

尾)追加到目标字符串的末尾 。目标字符串原先的结束符 '\0'  会被源字符串的第一个字符覆盖,

拼接完成后,在新的字符串末尾会自动添加一个 '\0'  作为结束标志。

1.2函数原型

char *strcat(char *dest, const char *src);

其中,dest 是目标字符串(其空间要足够容纳拼接后的内容且可修改), src 是源字符串(一般

为只读,用 const 修饰)。函数返回值为指向目标字符串 dest 的指针。

1.3代码演示:

#include <stdio.h>
#include <string.h>

int main() {
    char dest[20] = "Hello, ";
    char src[] = "world!";
    char *result = strcat(dest, src);
    printf("%s\n", result);
    return 0;
}

上述代码将 "world!"  追加到 "Hello, "  后面,最终输出 "Hello, world!"  。

1.4注意事项

- 源字符串要求:源字符串必须以  '\0'  结尾,否则函数无法判断源字符串的结束位置,会导致错误

的内存访问。

- 目标字符串要求:目标字符串不仅要有  '\0'  标识结束,还得有足够的空间来容纳源字符串的内

容,否则会造成缓冲区溢出,引发程序崩溃等严重问题 。

- 目标空间可修改:目标字符串所在的内存空间必须是可写的,不能是只读区域(如字符串常量

区)。

2.strcmp函数

2.1函数功能

strcmp  是C语言标准库 <string.h> 中的字符串比较函数,用于比较两个字符串的大小,基本信息

如下:

2.2函数原型

int strcmp(const char *str1, const char *str2);

str1  和 str2  是两个要比较的字符串,且都以指针形式传递,const 修饰表明函数不会修改这两个

字符串的内容。

2.3比较原则

从两个字符串的第一个字符开始,自左向右逐个字符按ASCII码值大小进行比较 ,直到出现不同的

字符或者遇到字符串结束符  '\0'  为止:

 - 相等情况:如果两个字符串对应位置的字符完全相同,直到其中一个字符串结束(即遇到  '\0'  ),则认为这两个字符串相等,函数返回 0。例如, strcmp("abc", "abc")  返回 0 。

- 大于情况:当比较过程中 ,str1 中某个字符的ASCII码值大于 str2 对应位置字符的ASCII码值 ,此时  strcmp  函数返回一个大于 0 的值。比如  strcmp("abc", "abb")  ,比较到第三个字符时, 'c' 的ASCII码值大于 'b' ,函数会返回大于 0 的值。

- 小于情况:若比较时  str1  中某个字符的ASCII码值小于  str2  对应位置字符的ASCII码值 ,函数返回一个小于  0  的值。像 strcmp("abb", "abc") ,比较到第三个字符,'b' 的ASCII码值小于 'c' ,函数返回小于 0 的值。

返回值:

  • 等于:返回  0  ,表示两个字符串相等。
  • 大于:返回大于  0  的值,确切数值因C语言实现而异,常返回 1,表示 str1 大于 str2  。
  • 小于:返回小于  0  的值,常返回 -1,表示  str1 小于 str2  。

2.4代码示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "hello";
    char str2[] = "world";
    char str3[] = "hello";

    int result1 = strcmp(str1, str2);
    int result2 = strcmp(str1, str3);

    if (result1 > 0) {
        printf("str1 大于 str2\n");
    } else if (result1 < 0) {
        printf("str1 小于 str2\n");
    } else {
        printf("str1 等于 str2\n");
    }

    if (result2 > 0) {
        printf("str1 大于 str3\n");
    } else if (result2 < 0) {
        printf("str1 小于 str3\n");
    } else {
        printf("str1 等于 str3\n");
    }

    return 0;
}

上述代码比较了三组字符串,根据  strcmp  函数的返回值判断字符串之间的大小关系并输出相应信

息。

2.5注意事项

- 只能比较字符串: strcmp 只能用于比较字符串,不能比较数字等其他类型数据。例如,不能用它

直接比较两个整数。

- 区分大小写:比较时严格区分大小写,如  "Apple"  和  "apple"  会被视为不同字符串。

3.strncpy函数

3.1函数定义

strncpy 是C语言标准库 <string.h>  中的字符串复制函数 ,用于将指定长度的字符串复制到字符数

组中。

3.2函数原型

char *strncpy(char *dest, const char *src, size_t n);

dest  是目标字符数组指针,用于存储复制后的字符串; src  是源字符串指针,为被复制的对象;

n  为要从源字符串复制的字符数量 , size_t  是无符号整型。

3.3函数功能

将  src  所指向字符串的前 n 个字符(不包含字符串结束符  '\0'  )复制到 dest 所指的数组中。复制

规则如下:

 - 源串长度小于  n  :若  src  字符串长度小于 n ,则将 src 全部字符复制到 dest 后,在 dest  后续位

置用空字符  '\0'  填充,直至复制完 n 个字节 。比如 src 为 "abc" , n  为 5 ,复制后 dest 内容

为"abc\0\0" 。

- 源串长度大于等于 n :若  src  字符串长度大于等于 n ,则只复制  src  的前 n 个字符到 dest  ,不

会自动添加字符串结束符  '\0' ,需手动添加 。例如  src  为 "abcdef" , n  为 3 ,复制后  dest  内容

为 "abc" ,若要正常使用,需手动添加  dest[3] = '\0'  。
 
返回值:

 
函数返回指向目标字符串  dest  的指针 。

3.4代码演示:

#include <stdio.h>
#include <string.h>

int main() {
    char dest[20];
    char src[] = "Hello, world!";

    // 复制前5个字符
    strncpy(dest, src, 5);
    // 手动添加字符串结束符
    dest[5] = '\0';
    printf("复制结果: %s\n", dest); 

    return 0;
}

上述代码将 src  字符串的前 5 个字符复制到 dest  数组中,并手动添加结束符后输出。

3.5注意事项

- 内存空间: dest  所指向的内存空间必须足够大,能够容纳复制的字符以及可能需要添加的结束

符  '\0'  ,否则会导致缓冲区溢出 。

- 结束符处理:当复制字符数  n  小于等于源字符串实际长度时,不会自动添加结束符  '\0'  ,要手

动添加 ,避免出现字符串操作错误。

- 重叠内存:若  src  和  dest  所指内存区域重叠,函数行为未定义,应避免这种情况 。

4.strncmp函数

4.1函数定义

strncmp  是C语言标准库 <string.h>  中的字符串比较函数,用于比较两个字符串的前 n  个字符,

具体介绍如下:

4.2函数原型

int strncmp(const char *str1, const char *str2, size_t n);

其中, str1  和 str2  是要进行比较的两个字符串指针, const  修饰表明函数不会修改字符串内

容: n  是要比较的最大字符数, size_t  是无符号整型 。

4.3比较原则

从两个字符串的第一个字符开始,逐个比较字符的ASCII码值,最多比较  n  个字符 ,有以下几种

情况:
 
- 相等情况:如果两个字符串的前  n  个字符完全相同,函数返回 0,比如 strncmp("abc", "abc",

3)  返回  0  。

- 大于情况:若在比较的前  n  个字符中, str1  某个字符的ASCII码值大于  str2  对应位置字符的

ASCII码值 ,函数返回一个大于  0  的值。例如  strncmp("abc", "abb", 3)  ,比较到第三个字符

时,'c' 的ASCII码值大于 'b' ,函数返回大于  0  的值。

- 小于情况:当在比较的前  n  个字符中, str1  某个字符的ASCII码值小于  str2  对应位置字符的

ASCII码值 ,函数返回一个小于  0  的值。比如  strncmp("abb", "abc", 3)  ,比较到第三个字

符,'b' 的ASCII码值小于 'c' ,函数返回小于  0  的值。

此外,若在比较过程中遇到空字符  '\0'  ,也会停止比较。
 
返回值:
 
- 等于:返回  0  ,:表示两个字符串的前  n  个字符相等。

- 大于:返回大于  0  的值,确切数值因C语言实现而异,常返回  1   ,表示  str1  的前  n  个字符

大于  str2  的前  n  个字符。

- 小于:返回小于  0  的值,常返回  -1  ,表示  str1  的前  n  个字符小于  str2  的前  n  个字符。

4.4代码演示:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "hello";
    char str2[] = "hel";
    int result = strncmp(str1, str2, 3);
    if (result == 0) {
        printf("前3个字符相等\n");
    } else if (result > 0) {
        printf("str1的前3个字符大于str2的前3个字符\n");
    } else {
        printf("str1的前3个字符小于str2的前3个字符\n");
    }
    return 0;
}

上述代码比较了  str1  和  str2  的前 3 个字符,并根据  strncmp  函数的返回值输出相应信息。

4.5注意事项

- 长度限制:比较的字符数  n  不能超过字符串实际长度,否则可能访问越界,导致程序异常。

- 区分大小写:和大多数C语言字符串函数一样, strncmp  区分大小写,若需忽略大小写比较,需

自定义函数或使用其他库函数(如  strncasecmp  ) 。

- 重叠内存:若  str1  和  str2  所指内存区域重叠,函数行为未定义,应避免这种情况。

以上就是这4个函数的相关内容,内容可能有点多,希望大家能够消化理解,感谢大家的观看!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值