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

Ash*_*ban 33 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++;
    }
}
Run Code Online (Sandbox Code Playgroud)

而且我收到了上述警告 pLastLetter[i] = &str[strIndex-1];

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

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

AnT*_*AnT 42

好吧,就像你自己说的那样,pLastLetter是一个char *指针数组,str而是一个数组const char.在&str[strIndex-1]表达具有类型const char*.你是不是允许在指定const char*值的char *指针.这会违反常规的规则.事实上,你正在做的是C中的一个错误.C编译器传统上将其报告为仅仅是"警告"以避免破坏一些旧的遗留代码.

至于"如何解决它"......这取决于你想要做什么.要么使pLastLetter阵列const char*或删除conststr.

  • @Asher:`const T*`只是一个不通过该指针修改指针的承诺,所以你可以隐式地将`T*`转换为`const T*`罚款.(但这确实会落到指针指针上.请参阅http://c-faq.com/ansi/constmismatch.html.) (2认同)

Sha*_* D. 5

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