Присвоить строку массиву символов фиксированной длины

Я искал через SO, и я столкнулся с этим вопросом о назначении массив символов фиксированной длины в строку. Но то, что я хочу, это обратная операция, присвоение строки массиву символов фиксированной длины. Например, если у меня есть

char name[20];
name = "John";

Я получаю ошибку во время компиляции, говоря, что я присваиваю массив символов [4] массиву символов [20].

Как я могу это сделать?

2

Решение

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

strncpy(name, "John", sizeof(name)-1);

РЕДАКТИРОВАТЬ

Как отмечали многие другие (я был неправ) — strncpy не всегда завершает строку нулем, поэтому если вам нужно использовать ее как строку c, то она должна быть явно завершена нулем. Это не переполнит его, но это может быть не все, что вам нужно

if(sizeof(name)>0)
{
name[sizeof(name)-1]=0;
}
3

Другие решения

char    dst[30];
string  src("hello");
// check here that sizeof(dst) > src.size()
copy(begin(src), end(src),  begin(dst));
dst[src.size()] ='\0';

std::string также имеет c_str() метод. Это обширно — динамически распределяет память. Вы можете использовать возвращенный const char* если не возражаете const , Эта c-строка будет разрушена, когда src разрушен.

0

Передача константной строки не будет выполнять работу, так как она не добавит \ 0 (escape-символы) к остальной части вашего массива !! strcpy делает это автоматически для вас, все свободные места заполнены escape-символами, поэтому вы не получите ошибки !!

0

Попробуйте использовать strcpy

http://www.cplusplus.com/reference/clibrary/cstring/strcpy/

в основном вы захотите strcpy(name,"John");

-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector