使用gcc/g ++编写指定代码示例成功。 strchr
呼叫没有错误,这显然将const char *
改为char *
。当给定const char *作为第一个参数时,C标准库函数`strchr`如何返回指向非const的指针?
我发现strchr
被声明为char * strchr(const char *, int)
在两个不同的来源pubs.opengroup.org和cplusplus.com
如果strchr
是为抛弃常量性来实现,那么,为什么是这样呢?
如果目标是提供可在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的。
[strchr实现如何工作]的可能的副本(http://stackoverflow.com/questions/14367727/how-does-strchr-implementation-work) – Kninnug