c - 返回-1时strtok消失

标签 c arrays token strtok

所以我正在编写代码将字符串放入数组中,它工作得很好,但是我希望它在我在文件中点击 ## 时终止字符串的读取。我正在运行一个循环并逐行解析字符串。在我的字符串解析器中,我放置了一个循环来检查 ##。它位于我的解析器函数的最后,它是:

for (i = 0; i < strlen(line)); i++)
{
    if ((buffer[i] == '#') && (buffer[i+1] == '#'))
    {
        return -1;
    }
}

问题是,当它到达末尾带有 ## 的行时,它不会将字符串解析到我的数组中。看起来它只是忽略了这个循环之前的代码。

作为附加信息,我使用 strtok 将标记放入 for 循环之前的 char* 数组中的位置。

编辑:这是我的 parseString 函数:

int parseString(char* line, char*** inString)
{
    char* buffer;
    int Token, i;

    buffer = (char*) malloc(strlen(line) * sizeof(char));
    strcpy(buffer,line);
    (*inString) = (char**) malloc(MAX_TOKS * sizeof(char**));

    Token = 0;  
    (*inString)[Token++] = strtok(buffer, DELIMITERS);

    while ((((*inString)[token] = strtok(NULL, DELIMITERS)) != NULL) && (Token < MAX_TOKS))
        Token++;

    for(i=0; i<strlen(line); i++)
    {
        if ((buffer[i] == '#') && (buffer[i+1] == '#'))
        {
            return -1;
        }            
    }
    return Token;
}

最佳答案

首先,您在数组上读取越界,因为 array[-1] 不好。其次,使用变量来保存字符串长度,因为这样做会导致 for 循环为每次迭代重新计算 strlen(line)

现在,对于您的问题,似乎您将其放在将其添加到数组的代码之前。如果您能给我们更多的代码,那将会有所帮助。

关于c - 返回-1时strtok消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19176454/

相关文章:

c - 在 C 中使用 PCRE 在文件中搜索和替换

c - 如何在 C 中连接两个字符串?

c - 难以理解这段代码的工作原理(双指针)

ios - 如何在 iOs 上获取 Twitter access token 和 secret?

node.js - Node 加密: en/decrypt token for validation

ios - 如何在 swift 的 Alamofire Post 请求中将 token 字符串(jwt)作为 Cookie 发送?

c - 使用 select() 超时

javascript - 使用 js 替换 JavaScript 数组对象的值

javascript - 将连续数字分组为 JavaScript 数组中的 "from~to"字符串

arrays - 为动态填充的对象数组生成 Mongoose 模式