Như chúng ta đều biết, strcpy_s là một phiên bản an toàn của strcpy.Strcpy_s hoạt động như thế nào?
Nhưng tôi tự hỏi nó hoạt động như thế nào ...
hãy xem một số ví dụ. khai
strpy_s của:
strcpy_s errno_t (_CHAR * _DEST, size_t _SIZE, const _CHAR * _SRC)
eg1
char dest[5];
char* src = "abcdefg";
strcpy_s(dest,5,src);
Nó sẽ trả về một sự khẳng định.
Tôi nghĩ rằng tôi có thể hiểu được điều này, sử dụng _SIZE để đảm bảo chúng tôi không thể sao chép nhân vật hơn _SIZE
Nhưng .. Tôi không thể hiểu được điều này:
char dest[5];
char* src = "abcdefg";
strcpy_s(dest,10,src);
chúng ta có thể vẫn nhận được một xác nhận, làm thế nào điều đó đã xảy ra?
ps, lỗi là:
gỡ lỗi Assertion Không
biểu: (L "Buffer là quá nhỏ" & & 0)
Trong VS2013
sẽ strcpy_s kiểm tra kích thước của dest bên trong cơ thể của nó? và nếu nó đúng thì sao? làm thế nào để kiểm tra một con trỏ như _DEST?
Đọc kỹ tài liệu: [MSDN] (http://msdn.microsoft.com/en-us/library/td1esda9.aspx) – Jens
Ví dụ thứ hai của bạn sai. Tham số _SIZE phải cung cấp chính xác kích thước của bộ đệm. Nếu bạn đưa ra 10 cho _SIZE nhưng bộ đệm của bạn chỉ là 5, thì kết quả là không xác định. Không có cách nào strcpy_s có thể bắt lỗi này. – Brandin
thực sự đã có một khẳng định. – Joey