char型の文字列を、stringクラスの文字列にする

解決


くろのすけ  2006-12-06 03:16:46  No: 63838

char型の文字列を、stringクラスの文字列に変える方法について
分かる方よろしくお願いします。

stringクラスのオブジェクト生成時に、↓のようにしましたが、
char型からstd::basic_stringに変換できないというエラーが
出てしまいます。

 char charArr[] = "ABC";
 string strArr = charArr;

main.cpp
d:\visualc++2005\original\file_test\file_test\main.cpp(56) : error C2440: '初期化中' : 'unsigned char [256]' から 'std::basic_string<_Elem,_Traits,_Ax>' に変換できません。
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>,
            _Ax=std::allocator<char>
        ]
        コンストラクタはソース型を持てません、またはコンストラクタのオーバーロードの解決があいまいです。
ビルドログは "file://d:\Yasunari\VisualC++2005\original\file_test\file_test\Debug\BuildLog.htm" に保存されました。
file_test - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========


keichan  2006-12-06 03:43:12  No: 63839

エラー内容にヒントがありますね。

VSの設定を確認してください。
[プロジェクト] -> [***のプロパティ] -> [構成プロパティ] -> [C/C++]
-> [言語] -> [char 型を規定で unsigned]
ここが「はい」になっている場合、「いいえ」にしてあげるか
ソース内で明示的に「signed」を指定してあげるといいと思います。

char charArr[] = "ABC";
      ↓
signed char charArr[] = "ABC";


くろのすけ  2006-12-06 04:26:33  No: 63840

>keichanさん
ご回答ありがとうございます。
> [プロジェクト] -> [***のプロパティ] -> [構成プロパティ] -> [C/C++]
> -> [言語] -> [char 型を規定で unsigned]
ですが、[はい]になっていました。[いいえ]にすることで、
コンパイルが通りました。
ただ、その後、再び[はい]に戻すと、なぜかコンパイルが通りました。(先ほど通らなかったのに...)結局、いずれの設定でも通るようになりました。
 char charArr[] = "ABC";        ・・・・・・  ○
(これで、とりあえず、私の質問内容は解決です)

ちなみに、今度は、下記のようにsigned & unsignedを付与して実施したところ、コンパイルが通りません。
 signed char charArr[] = "ABC";        ・・・・・・  ×
 unsigned char charArr[] = "ABC";      ・・・・・・  ×
charは、signed charやunsigned charと何かが異なるようです。
これは、どういうことでしょう?


YuO  2006-12-06 04:35:08  No: 63841

Cではcharはsigned charまたはunsigned charのどちらかの型ですが,
C++ではcharとsigned charとunsigned charはそれぞれ全く異なる型です。
それ故,signed charやunsigned charの配列をconst charの配列で初期化することはできません。


くろのすけ  2006-12-06 05:04:12  No: 63842

>YuOさん
ご回答ありがとうございます。

> Cではcharはsigned charまたはunsigned charのどちらかの型ですが,
> C++ではcharとsigned charとunsigned charはそれぞれ全く異なる型です。
charとsigned charやunsigned charの型がC++では違うということは
わかりました。

> それ故,signed charやunsigned charの配列をconst charの配列で初期化することはできません。

これは、↓の"3つは不可"ということですか?この3つはコンパイルが通るようですが、私が何か勘違いをしているのでしょうか?
 一.  signed char charArr[] = "ABC";    ⇒  ○

 二.  unsigned char charArr[] = "ABC";  ⇒  ○

 三.  char charArr[] = "ABC";           ⇒  ○

ちなみに現時点の状態を整理すると、↓のようになります。

 ①  signed char charArr[] = "ABC";
     string strArr = charArr;          ⇒  ×

 ②  unsigned char charArr[] = "ABC";
     string strArr = charArr;          ⇒  ×

 ③  char charArr[] = "ABC";
     string strArr = charArr;          ⇒  ○


YuO  2006-12-06 11:27:52  No: 63843

> それ故,signed charやunsigned charの配列をconst charの配列で初期化することはできません。

ごめんなさい。これは勘違いでした。規格を調べたら,思いっきり,
> char array (whether plain char, signed char, or unsigned char) can be initialized by a stringliteral (optionally enclosed in braces);
と,signed/unsigned charの配列を初期化できると書いてありました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加