C语言与C++ <string.h> memchr出现的问题

相同的如下代码

#include <stdio.h>
#include <string.h>

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++编译器对隐式转换要求更高。

猜你喜欢

转载自www.cnblogs.com/tangjicheng/p/9123846.html