从char*复制到char[]

copy from char* to char[]

本文关键字:char 复制      更新时间:2023-10-16

除了使用strcpy之外,还有其他方法可以从char*复制到char[]吗?我试过了,但不起作用。。对于前

char* t1 = "hello";
char t2[6];
t2 = t1;

它不是在编译。。表示将"char*"分配给char[6]的不兼容类型

感谢

使用strncpy:

strncpy(t2, t1, 6);

首先,您不能执行char* t1 = "hello";;仅仅因为字符串文字是常量,任何通过t1修改它们的尝试都会导致未定义的行为。

由于C++没有从常量字符指针到字符数组的赋值运算符,所以必须手动复制内存。memcpymemmovestrcpystrncpy是您的标准选项,您可以随时编写自己的(我不建议您这样做(。

您需要strcpy。C++(一个C(中的数组有一个指向第一项(本例中为字符(的指针。

所以strcpy(t2, t1)会起作用。

此外,作为一名囚犯,你需要const char * const t1 = "hello",但标准在这个问题上给予了很大的宽容

为了超级安全,您应该使用strncpy来复制,使用strnlen来获取字符串的长度,以某个MAX_length为界以防止缓冲区溢出。

char t2[MAX_LENGTH];
strncpy(t2, t1, strnlen(t1, MAX_LENGTH))

记住,t1只是一个指针——一个指向内存中某个位置的数字,而不是一个实际的字符串。不能使用赋值运算符复制它。

在C++中,您还可以使用copy:

#include <algorithm>
std::copy(t1, t1 + 6, t2);
char* t1 = "hello";
char t2[6];
memcpy(t2, t1, 6);

char* t1 = "hello";
char t2[6] = { t1[0], t1[1], t1[2], t1[3], t1[4], t1[5] };