В случае, если это уместно, я не компилирую это в среде Linux, вместо этого я использую компилятор tdm-gcc.
Я пишу текстовое поле для игры, и я хотел бы разделить произносимые слова на отдельные слова, чтобы потом поработать над ними. Моя проблема в том, что написанная мной функция split работает в конструкторе, а не в методе предварительного текста.
Это функция разделения:
char** split(char* string, const char* delimeter)
{
char** arr = (char**)malloc(sizeof(char*)*((strlen(string)+1)/2+1));
char* token = strtok(string, delimeter);
int i = 0;
while (token != NULL)
{
arr[i] = (char*)malloc(strlen(token)+1);
strcpy(arr[i], token);
i++;
token = strtok(NULL, delimeter);
}
arr[i] = NULL;
return arr;
}
Это мой (незаконченный) класс текстового поля
class Textbox
{
...
public:
Textbox(char* data[], int numSentences, SDL_Renderer* renderer, int scale)
{
...
fp = fopen("./text/names/female/femalenames1.txt", "r");
char* buffer;
int numBytes;
fseek(fp, 0, SEEK_END);
numBytes = ftell(fp);
fseek(fp, 0, SEEK_SET);
buffer = (char*)calloc(numBytes, sizeof(char));
fread(buffer, sizeof(char), numBytes, fp);
fclose(fp);
char** array = split(buffer, " ");
free(buffer);
fclose(fp);
}
void advanceText()
{
this->textPosition++;
char** array = split(this->data[this->textPosition], " ");
}
bool hasNext()
{
return data[textPosition] == "END" ? false:true;
}
};
Контекст advanceText ():
int playerIntro()
{
bool running = true;
...
SDL_Event event;
const char* dialogue[] = {"1st thing", "2nd thing", "3rd thing", "END"};
Textbox text((char**)dialogue, 50, renderer, scale);
while (running)
{
while (SDL_PollEvent(&event))
{
if (event.key.keysym.sym == SDLK_RETURN and text.hasNext())
{
text.advanceText();
}
}
...
}
...
return 0;
}
РЕДАКТИРОВАТЬ
Кажется, проблема на самом деле в первой функции strtok функции split
Обратите внимание, что любые неопределенные переменные в этом посте на самом деле определены в исходном коде. Любая помощь приветствуется, спасибо!
Задача ещё не решена.
Других решений пока нет …