C: токенизация системы токенов, но выполнение инструкций if завершается неудачей

#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()

в противном случае первый токен игнорируется