strrchr导致'无法从const char*转换为char*'

zeb*_*bra 2 c++ string visual-studio-2010

我正在尝试编译一些给我的代码,我被告知编译好了.也许在不同的编译器上.我正在使用VS2010,我有以下几行:

char *dot = strrchr(filename, '.');
Run Code Online (Sandbox Code Playgroud)

这会导致编译错误:

"错误C2440:'初始化':无法从'const char*'转换为'char*'

怎么会?我该如何解决?

Luc*_*ore 8

错误消息非常清楚.strrchr返回一个const char*.所以你需要:

const char *dot = strrchr(filename, '.');
Run Code Online (Sandbox Code Playgroud)

如果你真的需要char*,你可以strcpy用于转换.

  • @AtoMerZ我重复一遍 - 这会导致未定义的行为.如果你需要`char*`而不是`const char*`,请使用`strcpy`. (5认同)
  • @AtoMerZ抛弃const-ness永远不是一个好主意.它可能导致未定义的行为. (4认同)

Ker*_* SB 5

C++有更理智的版本strchrstrrchr超载ç感谢比,这么说:

const char * dot = strrchr(filename, '.');
Run Code Online (Sandbox Code Playgroud)

在没有重载的C中,你只有一个函数char * strrchar(const char *, const char *),由你来决定结果是常量还是可变的,这取决于要输入函数的指针类型.C有许多这种类型不安全的功能.