我遇到了问题。我想用一个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