2

私は SO を検索していて、固定長の文字配列を stringに割り当てるというこの質問に出くわしました。しかし、私が欲しいのは逆の操作で、文字列を固定長の文字配列に割り当てます。たとえば、私が持っている場合

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

char 配列 [4] を char 配列 [20] に割り当てているというコンパイル時エラーが発生します。

どうすればこれを行うことができますか?

4

4 に答える 4

3

使用するstrncpy

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

編集

他の多くの人が指摘したように (私は間違っていました) - strncpy は常に文字列を null で終了するとは限らないため、ac 文字列として使用する必要がある場合は、明示的に null で終了する必要があります。オーバーフローすることはありませんが、必要なのはそれだけではないかもしれません

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*気にしない場合は、returnを使用できます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 に答える