Я искал через SO, и я столкнулся с этим вопросом о назначении массив символов фиксированной длины в строку. Но то, что я хочу, это обратная операция, присвоение строки массиву символов фиксированной длины. Например, если у меня есть
char name[20];
name = "John";
Я получаю ошибку во время компиляции, говоря, что я присваиваю массив символов [4] массиву символов [20].
Как я могу это сделать?
использование strncpy
strncpy(name, "John", sizeof(name)-1);
РЕДАКТИРОВАТЬ
Как отмечали многие другие (я был неправ) — strncpy не всегда завершает строку нулем, поэтому если вам нужно использовать ее как строку c, то она должна быть явно завершена нулем. Это не переполнит его, но это может быть не все, что вам нужно
if(sizeof(name)>0)
{
name[sizeof(name)-1]=0;
}
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 (escape-символы) к остальной части вашего массива !! strcpy делает это автоматически для вас, все свободные места заполнены escape-символами, поэтому вы не получите ошибки !!
Попробуйте использовать strcpy
http://www.cplusplus.com/reference/clibrary/cstring/strcpy/
в основном вы захотите strcpy(name,"John");