iOS中有没有替换memcpy? 据我所知,memcpy不是'安全',建议的替代方案是'memcpy_s'
但是,在用memcpy_s替换memcpy之后,由于'架构armv7的未定义符号:'问题,代码无法编译。
如何解决此问题?如何设置项目设置?任何帮助将不胜感激。
来自AsyncSocket.m的一些代码:
- (CFIndex)readIntoBuffer:(UInt8 *)buffer maxLength:(CFIndex)length
{
if([_partialReadBuffer length] > 0)
{
// Determine the maximum amount of data to read
CFIndex bytesToRead = MIN(length, [_partialReadBuffer length]);
// Copy the bytes from the buffer
memcpy(buffer, [_partialReadBuffer bytes], bytesToRead);
// Remove the copied bytes from the buffer
[_partialReadBuffer replaceBytesInRange:NSMakeRange(0, bytesToRead) withBytes:NULL length:0];
return bytesToRead;
}
else
{
return CFReadStreamRead(_theReadStream, buffer, length);
}
}
答案 0 :(得分:2)
据我所知,memcpy不是'安全'
这不是真的。与一些非常不安全的stdlib函数相比,如果你不能使用它,它只是“不安全”。 memcpy()
将缓冲区长度作为其第三个参数,因此您不会冒缓冲区溢出的风险;您还可以检查源指针和目标指针,以避免取消引用NULL
等。
memcpy_s()
是微软的扩展,如此,它只能在Windows上使用(幸运的是)。如果您需要memcpy()
,那么请使用它,并且不要尝试用特定于供应商的东西替换标准函数(特别是如果该供应商是Microsoft的话)。