我正在尝试根据用户输入(例如,
)使用智能指针在c ++中动态分配字符数组std::cout<<"Input a word: ";
std::cin>>std::unique_ptr<char[]>ch_array(new char[]);
因此,当用户输入字符串时,它仅消耗必要的字节数。由于它一直给我一个错误,是否有其他解决方法来获得这样的结果?
答案 0 :(得分:0)
一些问题:
std::unique_ptr
对象仍然是std::unique_ptr
对象,没有内置的转换运算符可以转换为所指向的类型,这意味着它不能直接用作目标对象。格式化的输入运算符。答案 1 :(得分:0)
如果您不想使用std :: string或任何其他标准容器(如先前建议的那样),则基本上有两种选择:
直截了当-预先分配缓冲区,足够存储输入
std::cout << "Input a word: ";
char ch_array[100];
std::cin >> ch_array;
非常复杂的一个-按符号读取输入并重新分配内存
的原因,重新分配投放很多。而且我不建议使用它,除非内存是极其有限的资源,并且您甚至不能花费额外的数据字节。只是为了说明它可能有多复杂:
char* ch_array;
static int count = 0;
char c = getchar();
while(c != '\n')
{
if( count == 0)
ch_array = static_cast<char*>( malloc( sizeof(char)+1 ) );
else
ch_array = static_cast<char*>( realloc(ch_array, sizeof(char)*(count+2) ) );
ch_array[count] = c;
count++;
c = getchar();
}
ch_array[count] = '\0';
在此代码中,也跳过了错误检查,这对于重新分配是绝对必要的。有了它们,它将变得更加复杂
标题中的 智能指针 似乎与以下问题无关:
使用第一个选项,您可以在堆上分配缓冲区并使用它:
std::unique_ptr<char[]> ch_array(new char[100]);
第二步,您需要一个自定义删除器,如此处Is it possible to use a C++ smart pointers together with C's malloc?
所述