C ++ Почему мой массив текста не изменится после того, как я переопределю его другим?

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 }; в моем тексте над райдером. Я не уверен, как это исправить, я все перепробовал.

1

Решение

У вас есть массив из 16 указателей. Это необычно (в C ++ вы, вероятно, захотите использовать std::string), но не является непосредственной причиной вашей проблемы. Затем вы пытаетесь voodoo: вы передаете аргумент функции также названный Text и ожидать, что компилятор угадает, какой из двух TextТы имеешь в виду? Не работает, аргумент скрывает глобальный. Переименуйте аргумент функции.

2

Другие решения

Вы хотите назначение, но вы написали инициализацию.

Напишите это вместо:

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

редактировать

Имейте в виду, что Text это указатели массива, которые инициализируются с адресами char массив литералов. Назначение

Text[Test.TextID] = NewText;

устанавливает новый указатель Вы несете ответственность за то, что адрес, переданный вашей функции, указывает на char массив, который не будет изменен после вызова. Вы не копируете строку, а только указатель.

0

У вас есть пара ошибок.

  1. Инициализация вместо назначения.

    Написать Text[Test.TextID] = Text; вместо Text[Test.TextID] = { Text };

  2. У вас есть глобальная переменная с тем же именем, что и аргумент функции:

    char* Text[16] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N"};
    void food(char* Text){
    Text[Test.TextID] = Text;
    }
    

    Таким образом, глобальная переменная невидима, и вы пытаетесь назначить char* к элементу char массив, который является char

    Вы также можете использовать оператор глобальной области видимости :: в результате чего ::Text[Test.TextID] = Text;

  3. В C++ ваш main должен быть типа int, так void main(); является недействительным. Вы должны использовать int main();

  4. Обычно, когда вы используете литералы символов, которые вы хотите использовать std::string или по крайней мере const char*

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector