C++中常用函数介绍及示例
memcpy:从源内存地址复制src到目标内存地址dest,复制n个字节。:类似于memcpy,但可以处理源内存和目标内存重叠的情况。:将s所指向的n个字节都设置为c。:比较s1和s2所指向的内存,比较的字节数为n。
memcpy
作用:从源内存地址复制 src 到目标内存地址 dest,复制 n 个字节。
函数原型:
void* memcpy(void* dest, const void* src, size_t n);
示例:
#include <cstring>
#include <iostream>
int main() {
int src[4] = {1, 2, 3, 4};
int dest[4];
memcpy(dest, src, sizeof(src));
for (int i = 0; i < 4; ++i) {
std::cout << dest[i] << " ";
}
std::cout << std::endl;
return 0;
}
memmove
作用:类似于 memcpy,但可以处理源内存和目标内存重叠的情况。
函数原型:
void* memmove(void* dest, const void* src, size_t n);
示例:
#include <cstring>
#include <iostream>
int main() {
char src[10] = "Hello World";
char dest[10];
memmove(dest, src, sizeof(src));
std::cout << dest << std::endl;
return 0;
}
memset
作用:将 s 所指向的 n 个字节都设置为 c。
函数原型:
void* memset(void* s, int c, size_t n);
示例:
#include <cstring>
#include <iostream>
int main() {
int arr[4];
memset(arr, 0, sizeof(arr)); // 将数组初始化为0
for (int i = 0; i < 4; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
memcmp
作用:比较 s1 和 s2 所指向的内存,比较的字节数为 n。
函数原型:
int memcmp(const void* s1, const void* s2, size_t n);
示例:
#include <cstring>
#include <iostream>
int main() {
char str1[5] = "abcd";
char str2[5] = "abce";
int result = memcmp(str1, str2, sizeof(str1));
if (result < 0) {
std::cout << "str1 is less than str2" << std::endl;
} else if (result > 0) {
std::cout << "str1 is greater than str2" << std::endl;
} else {
std::cout << "str1 is equal to str2" << std::endl;
}
return 0;
}
memchr 和 memrchr
作用:memchr 搜索内存中第一次出现指定字符 c 的位置;memrchr 从后向前搜索。
函数原型:
void* memchr(const void* s, int c, size_t n);
void* memrchr(const void* s, int c, size_t n);
示例:
#include <cstring>
#include <iostream>
int main() {
char str[] = "Hello World";
char* result = memchr(str, 'W', sizeof(str));
if (result) {
std::cout << "Found 'W' at: " << result - str << std::endl;
}
return 0;
}
strncpy
作用:复制字符串,最多复制 n 个字符。
函数原型:
char* strncpy(char* dest, const char* src, size_t n);
示例:
#include <cstring>
#include <iostream>
int main() {
char src[] = "Hello World";
char dest[12];
strncpy(dest, src, sizeof(dest) - 1);
dest[sizeof(dest) - 1] = '\0'; // 确保字符串以空字符结尾
std::cout << dest << std::endl;
return 0;
}
strcat 和 strncat
作用:strcat 连接两个字符串;strncat 可以指定最大连接的字符数。
函数原型:
char* strcat(char* dest, const char* src);
char* strncat(char* dest, const char* src, size_t n);
示例:
#include <cstring>
#include <iostream>
int main() {
char str1[20] = "Hello ";
char str2[] = "World";
strcat(str1, str2);
std::cout << str1 << std::endl;
char str3[20] = "Hello ";
strncat(str3, str2, 3);
std::cout << str3 << std::endl;
return 0;
}
strpbrk 和 strsep
作用:strpbrk 根据一组分隔符分割字符串;strsep 根据分隔符分割字符串,返回分割后的字符串数组。
函数原型:
char* strpbrk(const char* s, const char* delim);
char** strsep(char** sp, const char* delim);
示例:
#include <cstring>
#include <iostream>
int main() {
char str[] = "one,two,three";
char* token = strtok(str, ",");
while (token != nullptr) {
std::cout << token << std::endl;
token = strtok(nullptr, ",");
}
return 0;
}
strstr 和 strcasestr
作用:strstr 搜索一个字符串在另一个字符串中第一次出现的位置;strcasestr 不区分大小写的字符串搜索。
函数原型:
char* strstr(const char* haystack, const char* needle);
char* strcasestr(const char* haystack, const char* needle);
示例:
#include <cstring>
#include <iostream>
int main() {
const char haystack[] = "Hello World";
const char needle[] = "world";
char* pos = strstr(haystack, needle);
if (pos) {
std::cout << "Found at: " << pos - haystack << std::endl;
}
return 0;
}
strlen
作用:计算字符串的长度(不包括终止空字符)。
函数原型:
size_t strlen(const char* s);
示例:
#include <cstring>
#include <iostream>
int main() {
const char str[] = "Hello";
std::cout << "Length: " << strlen(str) << std::endl;
return 0;
}
strtok
作用:分割字符串为多个部分。
函数原型:
char* strtok(char* str, const char* delim);
示例:
#include <cstring>
#include <iostream>
int main() {
char str[] = "one,two,three";
char* token = strtok(str, ",");
while (token != nullptr) {
std::cout << token << std::endl;
token = strtok(nullptr, ",");
}
return 0;
}
这些函数是 C 和 C++中处理内存和字符串的基础工具。使用它们时,需要特别注意边界条件和潜在的溢出问题,以避免安全漏洞。在 C++中,建议使用标准库提供的更安全的函数和类,如 std::string 和智能指针,来减少直接操作内存的需求。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)