strncpy()
được cho là bảo vệ khỏi sự cố tràn bộ đệm. Nhưng nếu nó ngăn tràn mà không kết thúc null, thì rất có thể một hoạt động chuỗi tiếp theo sẽ bị tràn. Vì vậy, để bảo vệ khỏi điều này, tôi thấy mình phải:
strncpy( dest, src, LEN );
dest[LEN - 1] = '\0';
man strncpy
cho:
Các
strncpy()
chức năng cũng tương tự, ngoại trừ việc không quán
bytesrc
được sao chép. Do đó, nếu không có byte nào trong số cácn
byte đầu tiên củasrc
, kết quả sẽ không được kết thúc bằng null.
Nếu không có null chấm dứt một cái gì đó dường như vô tội như:
printf( "FOO: %s\n", dest );
... có thể bị rơi.
Có lựa chọn thay thế tốt hơn, an toàn hơn strncpy()
không?
extern char *strncpy(char * restrict s1, const char * restrict s2, size_t n);
'): Hàm strncpy () sao chép nhiều nhất n ký tự từ s2 vào s1. Nếu s2 dài dưới n ký tự, phần còn lại của s1 được lấp đầy bằng các ký tự `\ 0 '. Nếu không, s1 không bị kết thúc.