将字符串分配给固定长度的字符数组

时间:2012-09-05 04:26:29

标签: c++ string

我正在搜索SO,我遇到了分配fixed length character array to a string的问题。但我想要的是反向操作,将字符串分配给固定长度的字符数组。例如,如果我有

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

我得到一个编译时错误,说我将char数组[4]赋给char数组[20]。

我怎样才能完成这项工作?

4 个答案:

答案 0 :(得分:3)

使用strncpy

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

修改

正如许多其他人指出的那样(我错了) - strncpy并不总是null终止字符串,因此如果你需要将它用作c字符串,那么它需要显式为null终止。它不会溢出它,但可能不是你需要的全部

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

答案 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。当src被破坏时,该c字符串将被破坏。

答案 2 :(得分:0)

传递一个常量字符串不会执行Job,因为它不会将\ 0(转义字符)附加到数组的其余部分!! strcpy会自动为您执行此操作,所有可用空间都填充了转义字符,因此您不会收到错误!!

答案 3 :(得分:-1)

尝试使用strcpy

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

基本上你会想要strcpy(name,"John");