在C++中,虽然标准库(STL)提供了丰富的字符串处理功能(如std::string类),但有时候了解和使用C风格的字符串函数(如strlen, strcpy_s, strcat_s, strcmp, strstr)也是很有必要的,尤其是在与C代码接口或处理底层系统调用时。下面我将逐一介绍这些函数的用法和注意事项。
strlen
功能:计算字符串的长度(不包括结尾的\0)。
原型:size_t strlen(const char *str);
使用示例:
#include <cstdio>
#include <cstring>
int main() {
const char* str = "Hello, World!";
size_t len = strlen(str);
printf("Length of '%s' is %zu\n", str, len);
return 0;
}
strcpy_s
功能:安全地将源字符串复制到目标字符串中,可以指定目标缓冲区的大小,以防止缓冲区溢出。
原型:errno_t strcpy_s(char *dest, size_t destsz, const char *src);
使用示例:
#include <cstdio>
#include <cstring>
int main() {
char dest[20];
const char* src = "Hello, World!";
errno_t err = strcpy_s(dest, sizeof(dest), src);
if (err == 0) {
printf("Copied '%s' to dest\n", dest);
} else {
printf("Error copying string\n");
}
return 0;
}
strcat_s
功能:安全地将源字符串追加到目标字符串的末尾,并指定目标缓冲区的大小。
原型:errno_t strcat_s(char *dest, size_t destsz, const char *src);
使用示例:
#include <cstdio>
#include <cstring>
int main() {
char dest[20] = "Hello, ";
const char* src = "World!";
errno_t err = strcat_s(dest, sizeof(dest), src);
if (err == 0) {
printf("Appended '%s' to '%s'\n", src, dest);
} else {
printf("Error appending string\n");
}
return 0;
}
strcmp
功能:比较两个字符串。
原型:int strcmp(const char *str1, const char *str2);
如果返回值 < 0,则表示str1小于str2。
如果返回值 = 0,则表示str1等于str2。
如果返回值 > 0,则表示str1大于str2。
使用示例:
#include <cstdio>
#include <cstring>
int main() {
const char* str1 = "Hello";
const char* str2 = "World";
int result = strcmp(str1, str2);
if (result < 0) {
printf("'%s' is less than '%s'\n", str1, str2);
} else if (result > 0) {
printf("'%s' is greater than '%s'\n", str1, str2);
} else {
printf("'%s' is equal to '%s'\n", str1, str2);
}
return 0;
}
strstr
功能:在一个字符串中查找第一次出现另一个字符串的位置。
原型:char *strstr(const char *str1, const char *str2);
如果找到,则返回第一次出现的str2在str1中的位置(指针)。
如果没有找到,则返回NULL。
使用示例:
#include <cstdio>
#include <cstring>
int main() {
const char* str = "Hello, World!";
const char* substr = "World";
char* result = strstr(str, substr);
if (result != NULL) {
printf("'%s' found in '%s'\n", substr, str);
} else {
printf("'%s' not found in '%s'\n", substr, str);
}
return 0;
}
这些函数是处理C风格字符串时常用的工具,但在C++项目中,推荐优先使用std::string类,因为它更安全、更灵活。