簡體   English   中英

我需要一些關於 sprintf() 和 array[] 的說明

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM