我正在尝试编译一些给我的代码,我被告知编译好了。也许在不同的编译器上。我正在使用VS2010,我有以下几行:
char *dot = strrchr(filename, '.');
这会导致编译错误:
“错误C2440:'初始化':无法从'const char *'转换为 'char *'
为什么?我该如何解决?
答案 0 :(得分:7)
错误信息非常清楚。 strrchr
会返回const char*
。所以你需要:
const char *dot = strrchr(filename, '.');
如果您确实需要char*
,则可以使用strcpy
进行转换。
答案 1 :(得分:5)
由于重载,C ++的strchr
和strrchr
的版本比C大,所以说:
const char * dot = strrchr(filename, '.');
在没有重载的C中,你只有一个函数char * strrchar(const char *, const char *)
,由你来决定结果是常数还是可变的,这取决于要输入函数的指针类型。 C有很多这种类型不安全的函数。