strcpy
은 항상 \0
으로 대상 문자열을 종료합니다. strncpy
일반적으로NULL
은 문자열을 종료하지만 수행하지 않을 수 있습니다. 문자열의 최대 바이트 수 (n
)를 복사하지만 불행하게도 (유용한 ABI의 관점에서) 복사 할 바이트 수 (즉, 종료 문자열을 포함하는 소스 문자열의 길이가 NULL
인 경우 NULL로 복사되지 않습니다.)가 지정된 길이 (n
)를 초과합니다.따라서 문자열 "1234567890"
(10 자, 11)을 복사하고 strncpy
의 마지막 인수로 10
을 전달하면 끝나지 않은 10 자 문자열이 표시됩니다. 여기
이 주위에 몇 가지 안전 루트입니다
dest = malloc(10); /* allocate ten bytes */
strncpy (dest, src, 10); /* copy up to 10 bytes */
dest[9] = 0; /* overwrite the 10th byte with a zero if it was not one already */
dest = malloc(10); /* allocate ten bytes */
strncpy (dest, src, 9); /* copy up to 9 bytes */
dest[9] = 0; /* make the 10th byte zero */
dest = calloc(10, 1); /* allocate and zero ten bytes */
strncpy (dest, src, 9); /* copy up to 9 bytes, leaving the NULL in */
사용은 calloc (10,는 sizeof (문자)); 확인하기. –