您现在的位置是:首页 >技术教程 >【021】C/C++字符串处理函数网站首页技术教程
【021】C/C++字符串处理函数
C/C++字符串处理函数
引言
? 作者简介:专注于C/C++高性能程序设计和开发,理论与代码实践结合,让世界没有难学的技术。包括C/C++、Linux、MySQL、Redis、TCP/IP、协程、网络编程等。
?
?️ CSDN实力新星,社区专家博主
?
? 专栏介绍:从零到c++精通的学习之路。内容包括C++基础编程、中级编程、高级编程;掌握各个知识点。
?
? 专栏地址:C++从零开始到精通
?
? 博客主页:https://blog.csdn.net/Long_xu
一、字符串操作函数
头文件:< string.h >
以str开头的是字符串处理函数,默认遇到’ ’结束操作。
1.1、测量字符串的长度strlen
strlen函数是一个C标准库函数,用于计算字符串的长度(不包括结束符 )。它的原型定义在string.h头文件中:
size_t strlen(const char *s);
其中,参数s是需要计算长度的字符串的首元素地址,返回值为该字符串的长度。
举个例子:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, world!";
printf("The length of '%s' is %d.
", str, strlen(str));
char str2[] = "Hel lo, world!";
printf("The length of '%s' is %d.
", str2, strlen(str2));
return 0;
}
输出结果:
The length of 'Hello, world!' is 13.
The length of 'Hel' is 3.
注意:strlen函数只能用于以null字符’ ’结尾的字符串。如果传递给它一个非空字符数组或者指针,但是没有以’ ’结尾,那么它可能会一直扫描内存直到遇到一个’ ’为止,这将导致不可预测行为和内存访问错误。
1.2、字符串拷贝函数strcpy
strcpy函数是一个C标准库函数,用于将一个字符串复制到另一个字符串中。它的原型定义在string.h头文件中:
char *strcpy(char *dest, const char *src);
char *strncpy(char *dest, const char *src, size_t n);
其中,参数dest是目标字符串(也就是要拷贝到的字符串),src是源字符串(也就是要被拷贝的字符串),n是要拷贝的最大字节数(如果遇到’ ’会自动结束)。返回值为指向目标字符串的指针。
举个例子:
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, world!";
char dest[20];
strcpy(dest, src);
printf("The copied string is: '%s'
", dest);
return 0;
}
输出结果:
The copied string is: 'Hello, world!'
需要注意的一点是,在使用strcpy函数时,目标字符数组必须足够大以容纳源字符数组的内容及结尾符号’ ’,否则会发生缓冲区溢出和未定义行为问题。
strcpy和strncpy都是C语言字符串拷贝函数,用于将一个字符串复制到另一个字符串中。它们的区别在于:
- 参数类型不同:strcpy的第一个参数是char *dest,第二个参数是const char *src;而strncpy的第一个参数也是char *dest,但第二个参数是const char *src,并且有一个额外的int参数n表示要拷贝的最大字符数。
- 处理方式不同:strcpy会将源字符串全部拷贝到目标字符串中,并在目标字符串末尾添加’ ’结尾符;而strncpy则只会拷贝源字符串中前n个字符(不包括’ ’),如果源字符串长度小于n,则剩余部分用’ ’填充。
因此,在使用这两个函数时需要根据具体需求选择合适的函数。如果需要完整地复制源字符串,可以使用strcpy;如果需要只复制源字符串前几个字符并控制拷贝长度,可以使用strncpy。
下面给出一个示例代码:
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, world!";
char dest1[20];
char dest2[10];
// 使用strcpy将src复制到dest1
strcpy(dest1, src);
printf("The copied string using strcpy is: '%s'
", dest1);
// 使用strncpy将src前6个字符复制到dest2
strncpy(dest2, src, 6);
dest2[6] = '