참조) http://kldp.org/node/2084
strncpy는 문자열을 정해진 수만큼 복사를 하되, string의 끝을 알리는 0x00을 만나면 거기서 중지합니다.
예를 들어 char *A="ABCD\0EFG" 일때 memcpy(B,A,8) 하시고
printf( "%s",&B[5] ) 해보시면 0x00뒤의 EFG가 찍히는 것을
보실수 있습니다. strncpy(B,A,8) 이라면 그렇지 않구요.
c 소스 코드를 보면, memcpy와 strncpy의 수행속도는 다릅니다.
memcpy는 CS 레지스터를 사용해서 고속복사가 가능하지만, strncpy의 경우는 string의 끝을 체크해야 하기 때문에 고속복사가 불가능하다.
그러므로, string 의 복사라 하더라도 string 크기가 정해져 있을 경우에는
memcpy 를 사용하는 것이 더 좋습니다.
strncpy는 문자열을 정해진 수만큼 복사를 하되, string의 끝을 알리는 0x00을 만나면 거기서 중지합니다.
예를 들어 char *A="ABCD\0EFG" 일때 memcpy(B,A,8) 하시고
printf( "%s",&B[5] ) 해보시면 0x00뒤의 EFG가 찍히는 것을
보실수 있습니다. strncpy(B,A,8) 이라면 그렇지 않구요.
strcpy 소스 이구요... (linux) char * strcpy(char * dest,const char *src) while ((*dest++ = *src++) != '\0') memcpy 소스 입니다. (linux) void* for (i=0;i<__n;i++) d[i] = s[i]; |
c 소스 코드를 보면, memcpy와 strncpy의 수행속도는 다릅니다.
memcpy는 CS 레지스터를 사용해서 고속복사가 가능하지만, strncpy의 경우는 string의 끝을 체크해야 하기 때문에 고속복사가 불가능하다.
그러므로, string 의 복사라 하더라도 string 크기가 정해져 있을 경우에는
memcpy 를 사용하는 것이 더 좋습니다.