Bạn đang tìm kiếm gia đình sprintf
chức năng. định dạng chung của họ là:
char output[80];
sprintf(output, "No record with name %s found\n", inputString);
Tuy nhiên, sprintf
bởi chính nó là vô cùng nguy hiểm. Nó là dễ bị cái gì đó gọi là tràn bộ đệm. Điều này có nghĩa là sprintf không biết chuỗi dây output
mà bạn cung cấp là bao nhiêu, vì vậy nó sẽ sẵn sàng viết nhiều dữ liệu hơn nó có sẵn. Ví dụ, điều này sẽ biên dịch sạch, nhưng sẽ ghi đè lên bộ nhớ có giá trị — và không có cách nào để cho sprintf
biết rằng nó đang làm điều gì sai trái:
char output[10];
sprintf(output, "%s", "This string is too long");
Các giải pháp là sử dụng một chức năng như snprintf
, mà phải mất một thời gian tham số:
char output[10];
snprintf(output, sizeof output, "%s", "This string is too long, but will be truncated");
hoặc, nếu bạn đang ở trên một hệ thống Windows, sử dụng _sntprintf
biến và bạn bè, trong đó bảo vệ chống lại tràn của một trong hai đầu vào hoặc đầu ra chuỗi.
Nguồn
2009-11-20 16:32:57
Tự làm ơn và mua "Ngôn ngữ lập trình C" của Kernigham & Ritchie. – Pete
Cảm ơn Pete, tôi sẽ. – itsaboutcode
http://www.eskimo.com/~scs/cclass/cclass.html –