码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-06-02 00:32:41      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:emc   stdio.h   转换   span   不同   技术分享   const   ptr   bubuko   

相同的如下代码

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

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

标签:emc   stdio.h   转换   span   不同   技术分享   const   ptr   bubuko   

原文地址:https://www.cnblogs.com/tangjicheng/p/9123846.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!