Standard C Library 里面的strchr函数的声明是:
char * strchr(const char *s, int c);
光看这个声明就会觉得有问题,接收的参数是const char*, 返回的是非const的,也就是说:
const char* str = ...
char* ptr = strchr(str, 'c');
假设str里面有字符c,那接下来就可以通过ptr修改str的内容了:
*ptr = 'd';
把字符c变成了d,绕过了编译器的检查。