私は SO を検索していて、固定長の文字配列を stringに割り当てるというこの質問に出くわしました。しかし、私が欲しいのは逆の操作で、文字列を固定長の文字配列に割り当てます。たとえば、私が持っている場合
char name[20];
name = "John";
char 配列 [4] を char 配列 [20] に割り当てているというコンパイル時エラーが発生します。
どうすればこれを行うことができますか?
私は SO を検索していて、固定長の文字配列を stringに割り当てるというこの質問に出くわしました。しかし、私が欲しいのは逆の操作で、文字列を固定長の文字配列に割り当てます。たとえば、私が持っている場合
char name[20];
name = "John";
char 配列 [4] を char 配列 [20] に割り当てているというコンパイル時エラーが発生します。
どうすればこれを行うことができますか?
使用するstrncpy
strncpy(name, "John", sizeof(name)-1);
編集
他の多くの人が指摘したように (私は間違っていました) - strncpy は常に文字列を null で終了するとは限らないため、ac 文字列として使用する必要がある場合は、明示的に null で終了する必要があります。オーバーフローすることはありませんが、必要なのはそれだけではないかもしれません
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*
気にしない場合は、returnを使用できますconst
。この c-string は、 が破棄されると破棄されsrc
ます。
定数文字列を渡すと、配列の残りの部分に \0 (エスケープ文字) が追加されないため、ジョブは実行されません!! strcpy はこれを自動的に行います。空きスペースはすべてエスケープ文字で埋められるため、エラーは発生しません!!
使ってみてstrcpy
http://www.cplusplus.com/reference/clibrary/cstring/strcpy/
基本的にあなたはしたいでしょうstrcpy(name,"John");