从char *复制到char []

时间:2011-11-25 17:32:36

标签: c++ cstring

有没有办法从char *复制到char []而不是使用strcpy? 我试过这个并不起作用.. 对于前

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

它没有编译..说'char *'与char [6]

的不兼容类型

谢谢

6 个答案:

答案 0 :(得分:3)

使用strncpy

strncpy(t2, t1, 6);

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

您需要strcpy。 C ++中的数组(一个C)有一个指向第一个项目的指针(在这种情况下是字符)。

所以strcpy(t2, t1)会做到这一点。

此外 - 您需要const char * const t1 = "hello" - 但该标准对该主题提出了很大的容忍度。

答案 3 :(得分:1)

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

#include <algorithm>

std::copy(t1, t1 + 6, t2);

答案 4 :(得分:1)

为了超级安全,你应该使用strncpy复制和strnlen来获取字符串的长度,以一些MAX_LENGTH为界,以防止缓冲区溢出。

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

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

答案 5 :(得分:0)

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] };