我正在搜索SO,我遇到了分配fixed length character array to a string的问题。但我想要的是反向操作,将字符串分配给固定长度的字符数组。例如,如果我有
char name[20];
name = "John";
我得到一个编译时错误,说我将char数组[4]赋给char数组[20]。
我怎样才能完成这项工作?
答案 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)