我对从以下网站读到的关于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*