C++ で Char 配列を文字列に変換する方法

胡金庫 2023年10月12日
  1. 文字列の配列を文字列に変換するには std::string コンストラクタを使用する
  2. 関数 memove を用いて文字列を文字列に変換する
  3. Char 配列を文字列に変換するには std::basic_string::assign メソッドを使用する
C++ で Char 配列を文字列に変換する方法

この記事では、Char 配列を文字列コンテナに変換する複数のメソッドを紹介します。

文字列の配列を文字列に変換するには std::string コンストラクタを使用する

この例では、定数 C-文字列を宣言し、これを文字列のコンストラクタのパラメータとして使用します。このメソッドは文字列の長さを自動的に計算します。コンストラクタ呼び出し後、必要に応じて tmp_string 変数を操作することができます。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  const char* c_string = "This will be stored in std::string";

  string tmp_string(c_string);
  cout << tmp_string << endl;

  return EXIT_SUCCESS;
}

出力:

This will be stored in std::string

関数 memove を用いて文字列を文字列に変換する

より簡単な方法は、char* のデータを初期化された string コンテナにコピーすることです。この方法では、memmove 関数に渡すために char 配列長を事前に知っておく必要があります。正しい動作をするためには string コンテナの初期化が重要であり、そのために tmp_string 変数には 0x01 バイトのバイトを入れていることに注意してください。

#include <cstring>
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

constexpr int C_STRING_LENGTH = 34;

int main() {
  const char* c_string = "This will be stored in std::string";
  string tmp_string(C_STRING_LENGTH, 1);

  memmove(&tmp_string[0], c_string, C_STRING_LENGTH);
  cout << tmp_string << endl;

  return EXIT_SUCCESS;
}

また、c_string のデータを tmp_string にコピーするには、以下のような関数を使用します。memcpymemccpymempcpystrcpystrncpy などの関数を使って c_string のデータを tmp_string にコピーすることもできますが、マニュアルページをよく読んで、エッジケースやバグを考慮してください。

Char 配列を文字列に変換するには std::basic_string::assign メソッドを使用する

先ほどの例と同様に、このメソッドも Char 配列の長さを必要とします。ここでは、tmp_ptr という名前の char ポインタを定義し、tmp_string の最初の文字のアドレスをこれに代入します。

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

constexpr int C_STRING_LENGTH = 34;

int main() {
  const char* c_string = "This will be stored in std::string";
  string tmp_string;

  tmp_string.assign(c_string, C_STRING_LENGTH);
  cout << tmp_string << endl;

  return EXIT_SUCCESS;
}
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C++ Char

関連記事 - C++ String