我对从以下网站读到的关于memcpy()(和malloc())的内容有些困惑:
http://www.cplusplus.com/reference/cstring/memcpy/
在该页面中,明确说明了以下两行:
目的地
Pointer to the destination array where the content is to be copied, type-casted to a pointer of type void*.
资源
Pointer to the source of data to be copied, type-casted to a pointer of type const void*.
但紧随其后,在代码void*中,以下两行中memcpy()使用的地方没有强制转换:
memcpy ( person.name, myname, strlen(myname)+1 );
memcpy ( &person_copy, &person, sizeof(person) );
请回答由这个前提引起的以下 2 个问题:
1)在 C 的情况下(与 C++ 相对)是否可以不强制转换void*为返回类型或参数,memcpy()就像在 C 中可以不强制转换void*为返回类型一样malloc()?如果是这样,正如我直觉的感觉,为什么它在那个著名的站点中明确说明我们需要将它转换到void*(即使它没有在代码中使用它)。那个站点有错吗?
2)现在关于那个知名网站的真正矛盾。考虑以下
http://www.cplusplus.com/reference/cstdlib/malloc/
在 的情况下malloc(),在描述中,它被写成好像optional要转换void*为返回类型(确切的词“.. can be cast to the desired type..”),这与memcpy()上面所说的要转换为的情况不同void*.但是,memcpy()尽管写了那个,但在铸造中没有完成it is to be cast,在这种情况下,即使写了它,也完成malloc()了铸造。现在我看到这有问题,至于C ,我们不应该铸造返回.void*can be cast to void*malloc()void*
再次简而言之,以免回答的人在我冗长的描述中感到困惑:
- 在 C 中是否建议不要强制转换为void*的返回值和参数memcpy()?
- 该站点在 C 代码中malloc()转换malloc()返回时是否错误。void*