0

我不知道为什么第二个 while 循环没有执行。它在 result[count] = atoi 上存在访问冲突...我认为添加 strcpy 会有所帮助,因为我意识到原始字符串正在被修改,但它没有任何区别。此外,我实际上使用的是 C++,但大部分源代码都在需要速度的 C 语言中。

int* split(const char* str, const char* delim)
{
    char* tok;
    int* result;
    int count = 0;

    char* oldstr = (char*)malloc(sizeof(str));
    strcpy(oldstr, str);

    tok = strtok((char*)str, delim);
    while (tok != NULL)
    {
        count++;
        tok = strtok(NULL, delim);
    }

    result = (int*)malloc(sizeof(int) * count);

    count = 0;
    tok = strtok((char*)oldstr, delim);
    while (tok != NULL)
    {
        result[count] = atoi(tok);
        count++;
        tok = strtok(NULL, delim);
    }
    return result;
}
4

1 回答 1

6
    char* oldstr = (char*)malloc(sizeof(str));
    strcpy(oldstr, str);

您没有分配足够的空间。由于stris a char *,您在平台上分配了 a 占用的字节char *数,这可能不足以容纳字符串。你要:

    char* oldstr = malloc(strlen(str)+1);
    strcpy(oldstr, str);

或者,为简单起见:

    char* oldstr = strdup(str);
于 2013-10-07T19:52:13.943 回答