C:令牌系统令牌化,但执行 if 语句失败
C: Token system tokenize, but doing if statements fail
我有这个小功能,假设是解析标记。
void LWDL_Parse(LWDL_Data data, LWDL_State state) {
char ch;
LWDL_string contents = "lwdl_data\n";
LWDL_Array tokens;
LWDL_TOOL_INIT_ARRAY( & 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( & tokens, chunks);
}
}
LWDL_TOOL_FREE_ARRAY(&tokens);
}
但是使用令牌数组或块执行 if 语句失败。
if (tokens.array[0] == "token"){
printf("works!\n");
}
有关如何解决此问题的任何线索。如果我对所有元素执行 for 循环,它们都会被正确解析。
您需要使用 strcmp
之类的比较函数,而不是 tokens.array[0] == "token"
我希望这样:
if (chunks != NULL){
LWDL_TOOL_INSERT_ARRAY( & tokens, chunks);
}
应该在第二次调用 strtok()
之前
否则将忽略第一个标记
我有这个小功能,假设是解析标记。
void LWDL_Parse(LWDL_Data data, LWDL_State state) {
char ch;
LWDL_string contents = "lwdl_data\n";
LWDL_Array tokens;
LWDL_TOOL_INIT_ARRAY( & 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( & tokens, chunks);
}
}
LWDL_TOOL_FREE_ARRAY(&tokens);
}
但是使用令牌数组或块执行 if 语句失败。
if (tokens.array[0] == "token"){
printf("works!\n");
}
有关如何解决此问题的任何线索。如果我对所有元素执行 for 循环,它们都会被正确解析。
您需要使用 strcmp
之类的比较函数,而不是 tokens.array[0] == "token"
我希望这样:
if (chunks != NULL){
LWDL_TOOL_INSERT_ARRAY( & tokens, chunks);
}
应该在第二次调用 strtok()
否则将忽略第一个标记