#arrays #c #if-statement #scripting #token
#массивы #c #if-statement #сценарии #токен
Вопрос:
У меня есть эта небольшая функция, которая предполагает разбор токенов.
void LWDL_Parse(LWDL_Data data, LWDL_State state) {
char ch;
LWDL_string contents = "lwdl_datan";
LWDL_Array tokens;
LWDL_TOOL_INIT_ARRAY( amp; tokens, 5); // 5 is starting size.
while ((ch = fgetc(state.LWDL_File)) != EOF) {
contents = LWDL_TOOL_AppendCharacters(contents, ch);
}
LWDL_string chunks;
const char remove[4] = " n";
chunks = strtok(contents, remove);
while (chunks != NULL) {
chunks = strtok(NULL, remove);
if (chunks != NULL){
LWDL_TOOL_INSERT_ARRAY( amp; tokens, chunks);
}
}
LWDL_TOOL_FREE_ARRAY(amp;tokens);
}
но выполнение инструкций if с массивом токенов или фрагментами завершается неудачей.
if (tokens.array[0] == "token"){
printf("works!n");
}
есть какие-либо подсказки о том, как это исправить. Если я выполняю цикл for для всех элементов, все они анализируются правильно.
Ответ №1:
вам нужно использовать функцию сравнения, подобную strcmp
, вместо tokens.array[0] == "token"
Ответ №2:
Я ожидаю этого:
if (chunks != NULL){
LWDL_TOOL_INSERT_ARRAY( amp; tokens, chunks);
}
должно быть перед вторым вызовом strtok()
в противном случае первый токен игнорируется