возвращая массив отдельных символов - PullRequest
0 голосов
/ 20 марта 2019

В настоящее время я работаю над университетским проектом, где я делаю игру в c. Я пытаюсь сделать выбор меню, основанного на кнопках, и мне нужно, чтобы текст мог попасть в несколько разных меню. Я пытаюсь использовать функцию на основе регистра переключателя, чтобы вернуть текст для кнопок.

char * findButtonTxt(int reference) {
    char *rtnTxt[] = { NULL };

    switch (reference) {
    case 1:
        rtnTxt[] = { "T", "O", "W", "E", "R", "_", "O", "F", "_", "P", "O", "W", "E", "R", NULL };
        return rtnTxt;
        break;
    default:
        return "T", "O", "W", "E", "R", "_", "O", "F", "_", "P", "O", "W", "E", "R", NULL;
    }
}

Я хочу использовать это так

    txt = findButtonTxt((4 * curMenu) + i + 1);
    betterText(20, (getmaxy() - (25 + (50 * i))) - 30, txt);

это то, что у меня есть до сих пор, мне нужно, чтобы он возвращал массив таким образом, потому что это единственный способ получить текст для отображения, используя версию BGI, которую я имею.

Это то, что сейчас работает.

    char *twrTxt[] = { "T", "O", "W", "E", "R", "_", "O", "F", "_", "P", "O", "W", "E", "R", NULL };

betterText((getmaxx() / 2), 0, twrTxt);

Извините за длинный вопрос. спасибо за помощь в продвинутом.

1 Ответ

0 голосов
/ 20 марта 2019

Я предполагаю, что C основан на коде.

Вы не можете вернуть выделенный массив стека в качестве указателя.

 char *rtnTxt[] = { NULL }; //Don't do this

Вы должны malloc массив и затем использовать strncpy

#define MAX_STRING 256 // modify this to what ever your max string will be
char *rtnTxt = malloc(sizeof(char)*MAX_STRING);

Затем в вашем переключателе вы можете strcpy

strcpy (rtnTxt ,"What I want to copy");

Затем вернуть результат

return rtnTxt;

Вот полное решение

#define MAX_STRING 256
char * findButtonTxt(int reference) {
    char *rtnTxt = malloc(sizeof(char)*MAX_STRING);

    switch (reference) {
        case 1:
        strcpy (rtnTxt ,"Tower of power");
        break;
    }
return rtnTxt;
}

Наконец, не забудьте позвонить free , когда вы закончите, иначе у вас будет утечка памяти :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...