memset()
được khai báo để trả về void*
luôn có cùng giá trị với địa chỉ được truyền vào hàm.
Giá trị trả về có công dụng gì? Tại sao nó không trở lại void
?
memset()
được khai báo để trả về void*
luôn có cùng giá trị với địa chỉ được truyền vào hàm.
Giá trị trả về có công dụng gì? Tại sao nó không trở lại void
?
strcat()
gì? Đôi khi, các hàm tiêu chuẩn là những gì chúng được chỉ định, không phải là những gì chúng phải như vậy.
Câu trả lời:
Chữ ký là phù hợp với tất cả các chức năng tương tự khác: memcpy()
, strcpy()
vv Tôi luôn luôn nghĩ rằng điều này đã được thực hiện để kích hoạt một cuộc gọi chuỗi chức năng như vậy, và nếu không sử dụng các cuộc gọi như vậy trong biểu thức.
Điều đó nói rằng, tôi chưa bao giờ gặp phải tình huống trong thế giới thực mà tôi cảm thấy bị bắt buộc phải sử dụng giá trị trả về theo cách như vậy.
Nó có thể được sử dụng cho chuỗi cuộc gọi như:
char a[200];
strcpy(memset(a, 0, 200), "bla");
strcpy
ngược lại , nếu trả về con trỏ qua cái cuối cùng được sao chép. memset(my_strcpy(a, "bla"), 0, a + 200);
(thích std::copy_n
và std::fill_n
làm trong C ++).
Tôi gặp câu hỏi này khi Googling để xem bộ nhớ nào trả về.
Tôi có một số mã nơi tôi kiểm tra một giá trị, sau đó nếu đó là đúng, hãy kiểm tra xem giá trị có phải là số không hay không.
Bởi vì không có cách nào hoàn toàn di động trong C để kiểm tra số không, tôi phải chạy memset ở giữa.
Vì vậy, mã của tôi là:
if ( a==true && (memcmp(memset(zeros, 0, sizeof(zeros)), b, sizeof(zeros)) == 0) )
Điều này nói lên mục đích chuỗi được liệt kê trong các câu hỏi trước, nhưng nó là một ví dụ về việc sử dụng kỹ thuật này.
Tôi sẽ để người khác đánh giá xem đây có phải là mã hóa tốt hay không.