1

コンパイラは、「char*からchar[32]への割り当てに互換性のないタイプ」と教えてくれます。これは私のコードです。

char* generalOperations[2]={"Off","On"};

 void test(){
   char value[32];
    switch(swapVariable){
     case 0:
      value=generalOperations[0]; //<==Error HERE!
     break;
    }

 }

[解決済み]:

  strcpy(value,generalOperations[0]);
4

4 に答える 4

8

std::stringの代わりにchar*とのstd::array<T, N>代わりに使用しT[N]ます。どちらも ( とは対照的に) タイプ セーフmemcpyであり、どちらも最新の C++ スタイルであり、代入演算子を使用して直接代入できます。

#include <array>
#include <string>

std::array<std::string, 2> generalOperations{"Off", "On"};

void test() {
    std::string value;
    switch(swapVariable) {
        case 0: value = generalOperations[0]; break;
    }
}
于 2012-10-19T14:25:00.490 に答える
3

配列を割り当てることはできません。のタイプをvalueに変更するか、 の内容をにchar*コピーできます。コンテンツをコピーする場合は、 に要素のコンテンツを保持するのに十分なスペースがあることを確認する必要があります。generalOptions[0]valuevaluegeneralOperations

文字列リテラルの変更は未定義の動作です。コンパイラは、実行時に奇妙な動作を経験const char*する代わりに、エントリの 1 つを変更しようとする試みを検出できます。generalOperations

const char* generalOperations [2]={"Off","On"};

const char* value;

配列を初期化する場合は、配列の要素数を指定する必要がないことに注意してください。

const char* generalOperations [] = {"Off","On"};

または、これが本当に C++ である場合はvalue、代わりに を作成し、それに代入して要素std::stringをコピーすることができます。generalOperations


C++ は実際には言語であり、C++11 の機能は を使用する代わりに許可されているため、値を に関連付けるswitchを作成できます。std::mapintstd::string

#include <iostream>
#include <string>
#include <map>

const std::map<int, std::string> generalOperations{ {17, "Off"},
                                                    {29, "On" } };
int main()
{
    auto e = generalOperations.find(17);
    if (e != generalOperations.end())
    {
        // Do something with e->second.
        std::cout << e->second << "\n";
    }
    return 0;
}

デモ: http://ideone.com/rvFxH .

于 2012-10-19T14:18:26.567 に答える
0
#include <string.h>

...
strcpy(value, generalOptions[0]);

C /C++では配列を割り当てることはできません。あなたのためにそれを行う関数があります。char配列がCスタイルの文字列(つまり、nullで終了する文字のシーケンス)を表す場合は、そのためのより専門的な関数もあります。strcpyそれらの機能の1つです。

于 2012-10-19T14:17:48.017 に答える
-1

この割り当てを使用する代わりにchar*をchar配列に割り当てることはできないため、割り当ては間違っています。strcpy()を使用できます。

于 2012-10-19T14:38:16.567 に答える