【发布时间】:2023-03-08 14:04:01
【问题描述】:
以下代码产生警告:
const char * mystr = "\r\nHello";
void send_str(char * str);
void main(void){
send_str(mystr);
}
void send_str(char * str){
// send it
}
错误是:
Warning [359] C:\main.c; 5.15 illegal conversion between pointer types
pointer to const unsigned char -> pointer to unsigned char
如何更改代码以在没有警告的情况下进行编译? send_str() 函数还需要能够接受非常量字符串。
(我正在使用 Hi-Tech-C 编译器为 PIC16F77 进行编译)
谢谢
【问题讨论】:
-
char *可以转换为const char *,反之则不行。所以只需将send_str更改为const char *。 -
谢谢!为什么它可以转换为一种方式而不能转换另一种方式?
-
考虑一下
const的含义:一个“只读”变量。将可写变量视为只读是完全可以的,反之则不然。 -
@Jodes:因为
mystr指向(又名:它包含的地址)只读 内存,其中包含\r\nHello。该内存无法更改,因此指针是const指针。如果你将它传递给一个接受非常量char *的函数,则应该允许该函数更改char *arg指向的字符串。const char *不允许这样做。 rwchar *,传递给一个函数,因为参数是const char *“誓言”不改变字符串,当然不是问题 -
读
const char *var = "string"为dont-touch char *var和char *some_str为touch-or-not char *some_str非const指针可以被读写
标签: c pointers type-conversion warnings constants