2013-12-21 2 views
2

iOS에서 memcpy를 대체 할 수 있습니까? memcpy를 memcpy_s로 바꾸면 memcpy가 안전하지 않고 제안 된 대안은 'memcpy_s'입니다.iOS에서 ObjC와 함께 memcpy_s를 사용할 수 있습니까?

그러나 '아키텍처 arv7에 대한 정의되지 않은 기호'문제로 컴파일 할 수 없습니다.

이 문제를 어떻게 해결할 수 있습니까? 프로젝트 설정을 어떻게 설정합니까? 어떤 도움을 주시면 감사하겠습니다.

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

memcpy를 사용하는 곳에 몇 가지 코드를 게시하십시오. – sha

+0

여기에 몇 가지 코드를 보여줍니다 ... – Mani

+0

'strcpy()'를 사용해보세요. – user3007735

답변

2

내가 알기로는 방어 적이기는있는 그대로 사실이 아니다 그

'안전'이 아니다. 정말 안전하지 않은 stdlib 함수와는 달리, 사용할 수 없다면 "안전하지 않다". memcpy()은 버퍼 길이를 세 번째 인수로 사용하므로 버퍼 오버플로가 발생할 위험이 없습니다. 당신은 또한 NULL 등 참조 해제를 피하기 위해 소스 및 대상 포인터를 확인할 수 있습니다.

memcpy_s()은 Microsoft 확장이며, Windows에서만 가능합니다 (다행히도). memcpy()이 필요한 경우이를 사용하고 표준 기능을 공급 업체 특정 제품으로 대체하지 마십시오 (특히 해당 공급 업체가 Microsoft가 아닌 경우).

관련 문제