strncpy
、memcpy
和 “=” 赋值符号?strncpy
使用场景
strncpy
时需要注意防止缓冲区溢出。举例
#include <cstring>
#include <iostream>
int main() {
char source[20] = "Hello, World!";
char destination[20];
strncpy(destination, source, sizeof(destination));
destination[sizeof(destination) - 1] = '\0'; // 确保字符串以空字符终止
std::cout << destination << std::endl; // 输出:Hello, World!
return 0;
}
memcpy
使用场景
memcpy
。memcpy
时同样需要注意防止缓冲区溢出,特别是当源和目标区域重叠时,应使用memmove
代替。举例
#include <cstring>
#include <iostream>
int main() {
int sourceArray[] = {1, 2, 3, 4, 5};
int destinationArray[5];
memcpy(destinationArray, sourceArray, sizeof(destinationArray));
for (int i = 0; i < sizeof(destinationArray) / sizeof(destinationArray[0]); ++i) {
std::cout << destinationArray[i] << " ";
}
std::cout << std::endl; // 输出:1 2 3 4 5
return 0;
}
= operator
),则执行该运算符定义的操作;如果没有自定义赋值运算符,则进行成员-wise的复制(浅拷贝)。#include <iostream>
struct Point {
int x;
int y;
};
int main() {
Point p1 = {10, 20};
Point p2;
p2 = p1; // 使用“=”赋值符号进行赋值
std::cout << "p2.x: " << p2.x << ", p2.y: " << p2.y << std::endl; // 输出:p2.x: 10, p2.y: 20
return 0;
}
结构体的复制(浅拷贝)。如果Point结构体中包含指针成员,那么只复制指针,不复制指针所指向的数据。为了深拷贝指针所指向的数据,通常需要自定义赋值运算符。
strncpy
。memcpy
。