我有一个类成员reader
,我想使用memcpy将const char *复制到它:
void copy(const char* b, int len){
// len is length that i want to copy to reader.
uint8_t maxLength = 256;
char reader[maxLength];
memcpy(&reader, b, len <= maxLength ? len : maxLength);
}
我测试了它,我认为这可行。我有两个问题:1.我可以在C ++中将uint8_t与int进行比较吗?我在这里比较它们。执行“ <=”时,是否会将uint8_t转换为int?会不会有任何使它成为错误的错误案例?2.在memcpy功能文档中说void * memcpy ( void * destination, const void * source, size_t num );
最后一个参数是“ size_t”,我是否应该将最后一行设为:
memcpy(&reader, b, (int)len <= maxLength ? len : maxLength);
或
memcpy(&reader, b, (size_t)len <= maxLength ? len : maxLength);
或
size_t size = len <= maxLength ? len : maxLength;
memcpy(&reader, b, size);
哪个是正确的?在我的测试用例中,它们都通过了,但是我不知道是否会有任何特殊情况使某些方法不起作用。
如果len
为负,则将其转换为大正数。显然,您知道长度,并且不想使用负数。因此,将len
转换为无符号的size_t
。您可以使用std::min
选择两个数字中较小的一个。
std::min