int _int = 192;
char * _char; // 未初始化,野指針
_itoa_s(_int, _char, 10); // 崩潰:寫入隨機地址
_itoa_s 第二參數需指向已分配、足夠大小的字符緩衝區。野指針指向隨機地址,寫入導致訪問違規。
// 方案一:棧上數組(推薦,自動釋放)
char buffer[20];
_itoa_s(_int, buffer, 10); // 或 _itoa_s(_int, buffer, sizeof(buffer), 10)
// 方案二:堆上分配(需手動釋放)
char *buffer = (char*)malloc(20 * sizeof(char));
if (buffer) {
_itoa_s(_int, buffer, 20, 10);
// 使用 buffer
free(buffer);
}
// 方案三:C++ string + c_str (不可直接用,需轉換)
std::string str = std::to_string(_int); // 現代 C++ 首選
errno_t _itoa_s(
int value, // 待轉換整數
char *buffer, // 目標緩衝區(必須有效)
size_t sizeInChars, // 緩衝區字符容量(含結束符)
int radix // 進制基數 (2, 8, 10, 16)
);
std::to_string(int) —— 返回 std::string,無緩衝區管理煩惱。std::ostringstream —— 格式化控制更靈活。fmt::format("{}", value) (C++20 std::format) —— 高性能、類型安全。sizeInChars 必須 ≥ 所需字符數+1,否則返回 ERANGE 且緩衝區不變。radix 僅支持 2/8/10/16,其他值報 EINVAL。