C語言與C++ <string.h> memchr出現的問題
阿新 • • 發佈:2018-06-02
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出現的問題