我在搜索 SO 时遇到了将固定长度字符数组分配给字符串的问题。但我想要的是反向操作,将一个字符串分配给一个固定长度的字符数组。例如,如果我有
char name[20];
name = "John";
我收到一个编译时错误,说我正在将 char array[4] 分配给 char array[20]。
我怎样才能做到这一点?
我在搜索 SO 时遇到了将固定长度字符数组分配给字符串的问题。但我想要的是反向操作,将一个字符串分配给一个固定长度的字符数组。例如,如果我有
char name[20];
name = "John";
我收到一个编译时错误,说我正在将 char array[4] 分配给 char array[20]。
我怎样才能做到这一点?
采用strncpy
strncpy(name, "John", sizeof(name)-1);
编辑
正如许多其他人指出的那样(我错了) - strncpy 并不总是以空值终止字符串,因此如果您需要将它用作 ac 字符串,那么它需要显式地以空值终止。它不会溢出它,但这可能不是您所需要的全部
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*
如果不介意可以使用returned const
。当被破坏时,这个 c-string 将被src
破坏。
传递常量字符串不会完成这项工作,因为它不会将 \0 (转义字符)附加到数组的其余部分!strcpy 会自动为您执行此操作,所有可用空间都用转义字符填充,因此您不会出错!