使用 gcc/g++ 编译给定代码示例成功。call没有错误strchr
,显然分配const char *
给char *
.
我发现strchr
声明为char * strchr(const char *, int)
在两个不同的来源pubs.opengroup.org和cplusplus.com
如果strchr
是为了抛弃 constness 而实现的,那为什么会这样呢?
如果目标是提供既适用于字符串char *
又适用于const char *
字符串的函数 - 它可以使用两个不同的函数名称来实现。
您能否对此进行更详尽的解释。
#include <string.h>
int main () {
const char *str = "Sample string";
char * ptr;
//ptr = str; // Error: discards const qualifier - both on gcc and g++
pch = strchr(str,'S'); // Succeeds in assigning <const char *> to <char *>
*pch = '4'; // Runtime error: segmentation fault
return 0;
}
使用 MSYS2/mingw-w64 gcc_v5.3.0 和 TDM-gcc32 v5.1.0 在 Win7 上进行了尝试。