【发布时间】:2022-01-12 19:26:52
【问题描述】:
我是 C++ 和动态内存分配的新手。
我有这段代码可以将数字从十进制转换为十六进制,它使用动态数组:
int hexLen = value.length();
char* arrayPtr = new char[hexLen];
_itoa_s(stoi(dec), arrayPtr, 16);
string hexVal = static_cast<string>(arrayPtr);
delete[] charArrayptr;
当我使用固定大小的数组时,_itoa_s() 使用它。但是,当使用动态数组时,编译器会说带有给定参数的方法不存在。
这是我做错了什么,还是_itoa_s() 根本不适用于动态数组?
带有非动态数组的版本(有效):
const int LENGTH = 20;
char hexCharArray[LENGTH];
_itoa_s(stoi(dec), hexCharArray, 16);
【问题讨论】:
-
问题是为什么要使用_itoa_s?有更简单的方法可以转换为十六进制,而不必使用 new/delete。
-
这可能只是 MRE,但如果大小是代码中的常量,则根本不需要动态数组。
标签: c++ arrays visual-c++ memory-management dynamic