2

我在搜索 SO 时遇到了将固定长度字符数组分配给字符串的问题。但我想要的是反向操作,将一个字符串分配给一个固定长度的字符数组。例如,如果我有

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

我收到一个编译时错误,说我正在将 char array[4] 分配给 char array[20]。

我怎样才能做到这一点?

4

4 回答 4

3

采用strncpy

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

编辑

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

if(sizeof(name)>0)
{
    name[sizeof(name)-1]=0;
}
于 2012-09-05T04:28:16.890 回答
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破坏。

于 2012-09-05T05:32:42.993 回答
0

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

于 2014-04-09T17:44:23.830 回答
-1

尝试使用strcpy

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

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

于 2012-09-05T04:28:32.527 回答