[英]I need some clarification about sprintf() and array[]
char buff[10]={0};
char buff1[6]="xxxxx";
sprintf(buff,"My name is %s");
這是buff(即10)的正確數組初始化嗎? 或者我需要用 17 初始化。
如果你打算用sprintf
覆蓋它,那么它不需要包含任何特別的東西,它只需要足夠大以容納數據。
換句話說, = {0}
就足夠了,在這種情況下實際上是可選的。
PSA:不要使用像
sprintf
這樣缺少長度參數的函數。 而是在有長度參數的情況下使用snprintf
和相關函數。 如果不采取適當的預防措施,緩沖區溢出錯誤是 C 中的一個大問題。
您應該在 C 中擁有的代碼大致是:
size_t buff_size = 255;
char buff[buff_size];
char* name = "Aadhi";
snprintf(buff, buff_size, "My names is %s", name);
其中不僅包含占位符參數,而且重要的是,應該使用的值。
在 C++ 中,您應該完全跳過它,而是:
std::string name = "Aadhi";
std::string message = "My name is " + name;
其中std::string
避免了幾乎所有與緩沖區溢出錯誤有關的問題。
C++ 20 引入了一個新的std::format
功能,該功能與sprint
非常相似,但沒有所有緩沖區溢出問題:
std::string name = "Aadhi";
std::string message = std::format("My name is {}", name);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.