如何填充指向 char 数组的unique_ptr?[已结束]

How I can fill a unique_ptr that is pointing to a char array? [closed]

提问人:Giovanni Scordilli 提问时间:8/17/2023 最后编辑:Giovanni Scordilli 更新时间:8/18/2023 访问量:99

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

3个月前关闭。

可以将某些内容放入指向 char 数组的unique_ptr中,如下所示:

#include <iostream>
#include <memory>
#define LEN 100
using std::cout, std::cin;

int main() {
    std::unique_ptr<char[]> ptr {new char[LEN]};

    cout << "Enter a word: \n";
    cin >> ptr;
}

我尝试过这个和 getline,但不起作用

C++ 数组 unique-ptr

评论

8赞 KamilCuk 8/17/2023
你不想要吗?std::string
3赞 Alan Birtles 8/18/2023
cin >> ptr.get();?或?cin.getline(ptr.get(), LEN);
1赞 j6t 8/18/2023
您是否知道 a 存储指向数组的指针,并且您可以使用 ?unique_ptr.get()
2赞 Ted Lyngmo 8/18/2023
@AlanBirtles 是的,第二个。第一个,没有那么多。它甚至在 C++20 中被删除。
1赞 463035818_is_not_an_ai 8/18/2023
只有当他们告诉你如何使用这些东西时,这个练习才有意义。如有疑问,您可以随时参考文档:en.cppreference.com/w/cpp/memory/unique_ptr

答:

0赞 Andrej Podzimek 8/18/2023 #1

这取决于你想要什么样的数组。对于动态大小的数据,只需使用 .对于静态大小的东西,下面在效率方面获胜,堆栈上有一个简单的缓冲区。它不使用 a ,但不清楚为什么练习会无缘无故地强迫您使用动态分配。std::stringa3unique_ptr

#include <array>
#include <cstdint>
#include <iostream>
#include <memory>

namespace {
constexpr size_t LEN{100};
}

int main() {
  std::unique_ptr a1{std::make_unique<char[]>(LEN)};
  std::unique_ptr a2{std::make_unique<std::array<char, LEN>>()};
  std::array<char, LEN> a3;

  std::cout << "Enter a word: \n";
  std::cin.getline(a1.get(), LEN);
  std::cout << "Enter a word: \n";
  std::cin.getline(a2->data(), LEN);
  std::cout << "Enter a word: \n";
  std::cin.getline(a3.data(), LEN);

  std::cout << a1.get() << '\n' << a2->data() << '\n' << a3.data() << '\n';
}