相同的如下代码
#include#include int main(){ const char str[] = "http://www.yiibai.com/html"; const char ch = '.'; char *ret; ret = memchr(str, ch, strlen(str)); printf("%s\n%s\n", str, ret); return 0;}
用C的编译器可以通过,main.c用GCC和MSVC都可以。
但是,改成main.cpp,用GCC和MSVC都会报错。
memchr函数原型为
const void* memchr( const void* ptr, int ch, size_t count );
在const void* 转换为 char* 时,C语言编译器和C++编译器处理是不同的。
在main.cpp中,改为
ret = (char *)memchr(str, ch, strlen(str));
就可以编译通过了。
原因是C++编译器对隐式转换要求更高。
posted on 2018-06-01 22:38 阅读( ...) 评论( ...)