1. 程式人生 > >C語言與C++ <string.h> memchr出現的問題

C語言與C++ <string.h> memchr出現的問題

TP png c++編譯 c語言 原因 bsp ima svc .cpp

相同的如下代碼

#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出現的問題