c - 该行有错误 --> `char ** tokenizer(char *line, int& noOfTokens) ` --- 你能帮帮我吗?

该行有一个错误:

char **tokenizer(char *line, int& noOfTokens)

错误是 -->[Error] expected ';', ',' or ')' before '&' token

char **tokenizer(char *line, int& noOfTokens) {
    char **tokens = (char **)malloc(10 * sizeof(char *));
    char *token = (char *)malloc(10 * sizeof(char));
    int k = 0;
    token[0] = '\0';
    int i = 0;
    while (line[i] == ' ')
        i++;
    for (; line[i] != '\n' && line[i] != '\0'; i++) {
        if (line[i] == ' ' || line[i] == ',' || line[i] == '[' || line[i] == ']' || line[i] == '\t') {
            if (token[0]!='\0') {
                token[k] = '\0';
                tokens[noOfTokens++] = token;
                token = (char *)malloc(10 * sizeof(char));
                token[0]='\0';
                k = 0;
            } else
                continue;
        } else {
            token[k++] = line[i];
        }
    }
    if (token[0] != '\0') {
        token[k] = '\0';
        tokens[noOfTokens++] = token;
    }
    return tokens;
}

回答1

在 C 中没有通过引用传递。您必须传递令牌数量的地址才能让函数更新它。

如果令牌超过 9 个字节,您还会出现内存泄漏和潜在的缓冲区溢出。

这是修改后的版本:

#include <stdlib.h>
#include <string.h>

char **tokenizer(const char *line, int *noOfTokens) {
    char **tokens = NULL;
    int i = 0;  // index into the string
    int k = 0;  // number of tokens
    int n;      // token length

    for (;;) {
        // skip whitespace
        while (line[i] == ' ' || line[i] == '\t')
            i++;
        // check for end of line
        if (line[i] == '\0' || line[i] == '\n')
            break;
        // test 1 byte tokens
        if (line[i] == ',' || line[i] == '[' || line[i] == ']') {
            n = 1;
        } else {
            // find token length
            n = strcspn(line + i, " \t\n,[]");
        }
        tokens = realloc(tokens, (k + 1) * sizeof(*tokens));
        tokens[k++] = strndup(line + i, n);
        i += n;
    }
    *noOfTokens = k;
    return tokens;
}

相似文章

javascript - elementFromPoint 无法识别某些元素

我有一个问题,我已经解决了几天,但我不明白问题是什么。我想在某个元素到达我的<div>顶部时触发一个事件。它适用于我文档中的大多数元素,除了一个,顺便说一句,这是我感兴趣的那个。它们都是span,具有...

最新文章