我遇到了問題。我想用一個CopyString()
函數將const char*
s和char*
s複製到緩衝區。它不應該是一個問題,但由於某種原因,我的編譯器不會做我期望它做的事情(我使用PICro的MikroC)。在c中傳遞char *到const char *
void CopyString(char * dest, const char * src, uint8 maxLength){
uint8 i;
for(i=0 ; src[i] && (i < maxLength) ; i++){
dest[i] = src[i];
};
}
char test[3]={'2', '0', ' '};
CopyString(buf, test, 3);//gives an error (illigal pointer conversion)
CopyString(buf, (const char *)test, 3); //Doesn't pass the pointer to the array... No idea why not... Do you?
void CopyString2(char * dest, char * src, uint8 maxLength){
uint8 i;
for(i=0 ; src[i] && (i < maxLength) ; i++){
dest[i] = src[i];
};
}
const char test[3]={'2', '0', ' '};
CopyString2(buf, "20 ", 3);//All ok
CopyString2(buf, test, 3); //gives an error (illigal pointer conversion)
任何人都知道如何做到這一點?目前我在一個C文檔中使用了CopyString2()
和CopyString()
,這個文檔看起來不太好,也不需要。爲什麼會通過char*
給const char*
給出問題? const char*
唯一的做法是確保char數組中的數據在函數內不會改變,對吧?
編輯: 在這裏編輯'整個'示例代碼(應該是一個最小,完整和可驗證的例子)。我使用Keil編譯器(我用它來編程ARM單片機的編譯器),它編譯得很好(就像我期望的那樣),但是使用MikroC PIC編譯器(就我所知,這是編譯器的調用方式)。 :
18 384 Illegal pointer conversion main.c (line 18, message no. 384)
23 384 Illegal pointer conversion main.c (line 23, message no. 384)
void CopyString(char * dest, const char * src, unsigned char maxLength){
unsigned char i;
for(i=0 ; src[i] && (i < maxLength) ; i++){
dest[i] = src[i];
};
}
void CopyString2(char * dest, char * src, unsigned char maxLength){
unsigned char i;
for(i=0 ; src[i] && (i < maxLength) ; i++){
dest[i] = src[i];
};
}
void main(){
char buf[16]={0,};
char test1[3]={'2', '0', ' '};
const char test2[3]={'2', '0', ' '};
CopyString(buf, test1, 3);//gives an error (illigal pointer conversion);
CopyString(buf, (const char *)test1, 3); //Doesn't pass the pointer to the array
CopyString2(buf, "20 ", 3);//All ok
CopyString2(buf, test2, 3); //gives an error (illigal pointer conversion);
}
發佈您的*實際代碼*。 – EOF
當發佈關於構建錯誤的問題時,請在問題主體中包含實際錯誤,完整,全部和*未編輯*。還包括編譯器給出的任何可能的信息說明。最好複製粘貼生成日誌。 –
您的示例不是*完整*(請參閱[mcve])。此外,如果您收到編譯錯誤,還會發布*完整*錯誤消息。 – user694733