我可以在iOS上使用带有ObjC的memcpy_s吗?

时间:2013-12-21 06:50:48

标签: ios objective-c memcpy

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);
    }
}

1 个答案:

答案 0 :(得分:2)

  

据我所知,memcpy不是'安全'

这不是真的。与一些非常不安全的stdlib函数相比,如果你不能使用它,它只是“不安全”。 memcpy()将缓冲区长度作为其第三个参数,因此您不会冒缓冲区溢出的风险;您还可以检查源指针和目标指针,以避免取消引用NULL等。

memcpy_s()是微软的扩展,如此,它只能在Windows上使用(幸运的是)。如果您需要memcpy(),那么请使用它,并且不要尝试用特定于供应商的东西替换标准函数(特别是如果该供应商是Microsoft的话)。