1
char* Text[16] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N"};
struct Test{
     byte TextID;
} Test;

void TextOverrider(char* Text){
     Test.TextID < 14 ? Test.TextID++ : Test.TextID = 0;
     Text[Test.TextID] = { Text };
}

そして私のメインでは

void main(){
     printf("%s\n\n", Text[0]);
     TextOverrider("Hello");
     TextOverrider("Whats");
     TextOverrider("Up");
     TextOverrider("Dude");
     TextOverrider("Playing");
     TextOverrider("Xbox");
     TextOverrider("Lol");
     TextOverrider("XD");
     TextOverrider("5EVR");
     TextOverrider("Anyonmoose");
     TextOverrider("Hoora");
}

Text[Test.TextID] = { Text };ライダーのテキストにエラーが表示されます。修正方法がわからないので、すべて試しました。

4

3 に答える 3

2

16 個のポインターの配列があります。これは珍しいことですが (C++ ではおそらく を使用したいと思うでしょうstd::string)、問題の直接の原因ではありません。次に、 voodoo を試します。名前も付けられた関数引数を渡しText、コンパイラーが 2 つTextの s のどちらを意味するかを推測することを期待します。機能しません。引数はグローバルを隠します。関数の引数の名前を変更します。

于 2014-09-24T13:20:22.593 に答える
0

割り当てが必要ですが、初期化を書きました。

代わりにこれを書いてください:

void TextOverrider(char* NewText){
 Test.TextID < 14 ? Test.TextID++ : Test.TextID = 0;
 Text[Test.TextID] = NewText;
}

編集

配列リテラルTextのアドレスで初期化される配列ポインターであることに注意してください。char割り当て

Text[Test.TextID] = NewText;

新しいポインターを設定します。char関数に渡されるアドレスが、呼び出し後に変更されない配列を指している必要があります。文字列はコピーせず、ポインターのみをコピーします。

于 2014-09-24T13:19:42.570 に答える