скопировать с char * на char [] - PullRequest
0 голосов
/ 25 ноября 2011

есть ли способ скопировать из char * в char [], кроме использования strcpy? Я попробовал это и не работает .. для бывших

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

Он не компилируется .. говоря, что несовместимые типы присвоения 'char *' для char [6]

Спасибо

Ответы [ 6 ]

3 голосов
/ 25 ноября 2011

Использование strncpy :

strncpy(t2, t1, 6);
2 голосов
/ 25 ноября 2011

Первым делом - вы не можете сделать char* t1 = "hello";;Просто потому, что строковые литералы являются постоянными, и любая попытка изменить их через t1 приведет к неопределенному поведению.

Поскольку C ++ не имеет операторов присваивания из константного указателя на массив символов, вам необходимо скопировать памятьвручную.memcpy, memmove, strcpy или strncpy - ваши стандартные параметры, и вы всегда можете написать свойсвое (что я не рекомендую вам делать).

1 голос
/ 25 ноября 2011

Чтобы быть сверхбезопасным, вы должны использовать strncpy для копирования и strnlen, чтобы получить длину строки, ограниченную некоторым MAX_LENGTH для защиты от переполнения буфера.

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

Помните, что t1 - это только указатель - число, указывающее на какое-то место в памяти, а не на настоящую строку. Вы не можете скопировать его с помощью оператора присваивания.

1 голос
/ 25 ноября 2011

В C ++ вы также можете использовать copy:

#include <algorithm>

std::copy(t1, t1 + 6, t2);
1 голос
/ 25 ноября 2011

Вам нужно strcpy.Массивы в C ++ (a C) имеют указатель на первый элемент (в данном случае это символ).

Таким образом, strcpy(t2, t1) сделает свое дело.

Кроме того - будучи пердантикомнужно const char * const t1 = "hello" - но стандарт дает много толерантности по этому вопросу.

0 голосов
/ 25 ноября 2011
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] };
...