有没有办法从char *复制到char []而不是使用strcpy? 我试过这个并不起作用.. 对于前
char* t1 = "hello";
char t2[6];
t2 = t1;
它没有编译..说'char *'与char [6]
的不兼容类型谢谢
答案 0 :(得分:3)
使用strncpy:
strncpy(t2, t1, 6);
答案 1 :(得分:2)
首先要做的事 - 你不能做char* t1 = "hello";
;只是因为字符串文字是常量,任何尝试通过t1
修改它们都会导致未定义的行为。
由于C ++没有从常量字符指针到字符数组的赋值运算符,因此必须手动复制内存。 memcpy
,memmove
,strcpy
或strncpy
是您的标准选项,您可以自己编写(我不建议您这样做)。
答案 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] };