警告:赋值从指针目标类型中丢弃限定符

时间:2010-08-13 18:41:18

标签: c

我写了以下代码:

void buildArrays(char *pLastLetter[],int length[], int size, const char str[]) {

    int i;
    int strIndex = 0;
    int letterCounter = 0;

    for (i=0; i<size; i++) {

        while ( (str[strIndex] != SEPERATOR) || (str[strIndex] != '\0') ) {
            letterCounter++;
            strIndex++;
        }
        pLastLetter[i] = &str[strIndex-1];
        length[i] = letterCounter;
        letterCounter = 0;
        strIndex++;
    }
}

我在pLastLetter[i] = &str[strIndex-1];

上收到了上述警告
  

pLastLetter is a pointers array that points to a char in str[].

任何人都知道为什么我会得到它以及如何解决它?

2 个答案:

答案 0 :(得分:40)

嗯,正如您自己所说,pLastLetterchar *指针的数组,而strconst char的数组。 &str[strIndex-1]表达式的类型为const char*。您不能将const char*值分配给char *指针。这会违反常规的规则。事实上,你所做的是C中的一个错误.C编译器传统上只是将其报告为“警告”,以避免破坏旧的遗留代码。

至于“如何修复它”......这取决于你想要做什么。将pLastLetter数组const char*或从const移除str

答案 1 :(得分:5)

str是const,pLastLetter不是。它说如果你这样做就会丢弃const限定符。