C++でstring型からchar配列に値を代入する方法
stringのメンバ関数のc_str()を用いると、C++のstringをchar配列に代入できます。 c_str()は文字配列へのポインタを取得し、それをchar配列に代入します。
以下はコード例です
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, world!";
char arr[20];
// 使用c_str()函数将string赋值给char数组
std::strcpy(arr, str.c_str());
std::cout << arr << std::endl;
return 0;
}
このコードは、stringオブジェクトのstrに「Hello, world!」という文字列を格納し、その後c_str()関数を使ってstrをconst char*型ポインタに変換してから、strcpy()関数を使用してc_str()関数から返ってきたポインタの示す文字列をchar配列arrにコピーします。最後に、arrの内容を出力します。
注意、char の配列の長さは string の内容と空文字 ‘\0’ を納める十分な大きさになっている必要があります。 しかし C++11 では string のメンバ関数 copy() を使って string を char の配列にコピーすることもできます。これはバッファオーバーランのリスクを回避します。 例:
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, world!";
char arr[20];
// 使用copy()函数将string赋值给char数组
str.copy(arr, sizeof(arr));
// 将最后一个字符设置为'\0',以表示字符串的结束
arr[str.size()] = '\0';
std::cout << arr << std::endl;
return 0;
}
前の例と似ていますが、バッファオーバーフローのリスクを回避するためにstring メンバー関数 copy() を使用しています。copy() 関数を呼び出した後、最後の文字を手動で ‘\0’ に設定して、文字列の終了を示す必要があります。