C++ strrchr导致';无法从常量字符*转换为字符*';
我正在尝试编译一些给我的代码,他们告诉我编译得很好。也许在另一个编译器上。我正在使用VS2010,我有以下行:C++ strrchr导致';无法从常量字符*转换为字符*';,c++,string,visual-studio-2010,C++,String,Visual Studio 2010,我正在尝试编译一些给我的代码,他们告诉我编译得很好。也许在另一个编译器上。我正在使用VS2010,我有以下行: char *dot = strrchr(filename, '.'); 这会导致编译器错误: 错误C2440:“正在初始化”:无法从“常量字符*”转换为 “char*” 为什么?我如何修复它?错误消息非常清楚。strrchr返回一个const char*。因此您需要: const char *dot = strrchr(filename, '.'); 如果您真的需要一个char*,
char *dot = strrchr(filename, '.');
这会导致编译器错误:
错误C2440:“正在初始化”:无法从“常量字符*”转换为
“char*”
为什么?我如何修复它?错误消息非常清楚。
strrchr
返回一个const char*
。因此您需要:
const char *dot = strrchr(filename, '.');
如果您真的需要一个
char*
,您可以使用strcpy
进行转换。C++由于重载而比C有更健全的strchr
和strrchr
版本,所以说:
const char * dot = strrchr(filename, '.');
在没有重载的C中,只有一个函数
char*strrchar(constchar*,constchar*)< /代码>,取决于你要输入的函数是哪一种类型的指针。C有很多这样的类型不安全的函数。< /P>我修改了标签,因为我没有看到C++的任何引用。<代码>文件名< /代码>是什么类型?@李察:不要这样做。正如Kerrek指出的那样。答案,在C++标准库中出现的重载将对行为产生重大影响。或者将结果转换为<代码> char */COD>这样:<代码>(char *)Strurr(文件名)“,”);
@AtoMerZ:最好显式使用常量强制转换
@AtoMerZ丢弃常量从来都不是一个好主意。它可能会导致未定义的行为。在我遇到的某些情况下,我需要能够修改结果,这就是为什么我更喜欢将结果转换为非常量类型。@AtoMerZ我重复我自己-这可能导致o未定义的行为。如果需要char*
而不是const char*
,请使用strcpy
。