5

在以下函数中:

char *mystrtok(const char *input, const char *delim,char *rest) {
    int i;
    for (i = 0; input[i] != *delim && input[i] != '\0'; ++i) {
        continue;
    }
    char *result = malloc(sizeof(char) * (i + 2));
    memcpy(result, input, i + 1);
    result[i + 1] = '\0';
    if (input[i + 1] != '\0') 
        rest = input + i + 2;
    else
        rest = NULL;
    return result;
}

我得到assignment discards 'const' qualifier from pointer target type了 line rest = input + i + 2,但是,正如你所看到的,rest 不是一个常量指针。我在这里做错了什么?

4

3 回答 3

8

input是一个指向常量字符的指针,并且您将它分配给一个指向非常量字符的指针。对你来说可能是一个有趣的阅读。

于 2012-04-11T20:26:56.563 回答
2

您还可以使用 (char*) 类型转换您的“输入”变量,这将解决警告。只是要小心使用像这样的显式转换,以免修改常量本身。

rest = (char*)input + i + 2;
于 2016-11-22T11:17:22.313 回答
0

将原型更改为

char *mystrtok(const char *input, const char *delim, const char *rest);
于 2012-04-11T20:29:19.503 回答