在 iOS 中是否有任何 memcpy 的替代品? 据我所知,memcpy 并不“安全”,建议的替代方案是“memcpy_s”
但是,在将 memcpy 替换为 memcpy_s 后,由于“架构 armv7 的 undefined symbol :”问题,代码无法编译。
我该如何解决这个问题?如何设置项目设置?任何帮助将不胜感激。
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);
}
}
最佳答案
as I know, memcpy is not 'safe'
事实并非如此。对比一些真正不安全的stdlib函数,只有不能使用才是“不安全”。 memcpy()
将缓冲区长度作为其第三个参数,因此您不会冒缓冲区溢出的风险;您还可以检查源指针和目标指针,以避免取消引用 NULL
等。
memcpy_s()
是 Microsoft 的扩展,因此,它只能在 Windows 上使用(幸运的是)。如果您需要 memcpy()
,请使用它,并且不要尝试用特定于供应商的东西替换标准函数(尤其是当该供应商是 Microsoft 时)。
关于ios - 我可以在 iOS 上将 memcpy_s 与 ObjC 一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20716402/