2012-04-11 71 views
1

在下面的功能:「分配丟棄‘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

回答

5

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

0

變化的原型

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

,你也可以使用一個(字符*)投你「輸入」變量類型的就解決了警告。只需要謹慎使用像這樣的明確轉換,以免自己修改常量。

rest = (char*)input + i + 2; 
相關問題