【发布时间】:2016-04-22 21:19:09
【问题描述】:
使用 gcc/g++ 编译给定代码示例成功。 strchr 调用没有错误,显然将const char * 分配给char *。
我发现strchr 在两个不同的来源pubs.opengroup.org 和cplusplus.com 上被声明为char * strchr(const char *, int)
如果 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;
}
在 Win7 上使用 MSYS2/mingw-w64 gcc_v5.3.0 和 TDM-gcc32 v5.1.0 进行了尝试。
【问题讨论】: