“分配丢弃‘const’限定符”关于非const指针错误

问题描述:

在下面的功能:“分配丢弃‘const’限定符”关于非const指针错误

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为线rest = input + i + 2,但是,正如你所看到的,其余的是不是一个常数指针。我在这里做错了什么?

+1

但是'input'是'const' ... – Mysticial 2012-04-11 20:26:05

+1

“正如你所看到的,休息不是一个常量指针”。你不能给一个非const('rest')成员分配一个const('input'),这正是错误信息所说的。你试图把它扔掉(抛弃),但你不能那样做。 – 2012-04-11 20:26:14

input是一个指向常量字符的指针,并且您将它指定给一个指向非常量字符的指针This here可能是一个有趣的读物。

+0

嗯,我的意思是使用常量指针,而不是常量字符。 :( – yasar 2012-04-11 20:27:44

+0

@ yasar11732:你在说什么? – 2012-04-11 20:28:19

+0

@ yasar11732阅读文章我链接了一下,它非常普遍的困惑:-) – littleadv 2012-04-11 20:29:01

变化的原型

char *mystrtok(const char *input, const char *delim, const char *rest); 

,你也可以使用一个(字符*)投你“输入”变量类型的就解决了警告。只需要谨慎使用像这样的明确转换,以免自己修改常量。

rest = (char*)input + i + 2;