我使用以下代码。
#include <iostream>using namespace std;int main() { char* str; std::cin>>str; return 0;}
#include <iostream>
using namespace std;
int main() {
char* str;
std::cin>>str;
return 0;
}
字符串我显然明白,字符串只是一个指针,没有指向任何东西,因此不能接受输入。但是有没有一种方法可以将输入到字符指针中呢??
2g32fytz1#
你可以这样做:
int buffer_size = 50char *c = new char[buffer_size];std::cin >> std::setw(buffer_size) >> c;
int buffer_size = 50
char *c = new char[buffer_size];
std::cin >> std::setw(buffer_size) >> c;
字符串然而,这也存在问题;主要是因为它使用了一个你必须管理的固定大小的原始数组。它还以非异常安全的方式手动管理数组的生存期,尽管这可以通过智能指针来修复。
std::unique_ptr<char[]> c(new char[buffer_size]);std::cin >> std::setw(buffer_size) >> c.get();
std::unique_ptr<char[]> c(new char[buffer_size]);
std::cin >> std::setw(buffer_size) >> c.get();
型完全从原始数组转移到管理自己资源的对象更好:
std::string s;std::cin >> s;
std::string s;
std::cin >> s;
型如果需要字符串中的char const *,可以使用std::string::c_str()。
char const *
std::string::c_str()
void foo(char const *);foo(s.c_str());
void foo(char const *);
foo(s.c_str());
型或者,如果你真的需要一个char*,你可以这样做:
char*
void foo(char *c, size_t n);foo(s.data(), s.size()); // C++11// C++03foo( (s.size() ? &s[0] : NULL), s.size()); // pass a pointer if the string is not empty, NULL otherwise
void foo(char *c, size_t n);
foo(s.data(), s.size()); // C++11
// C++03
foo( (s.size() ? &s[0] : NULL), s.size()); // pass a pointer if the string is not empty, NULL otherwise
型
mo49yndu2#
这将工作:
#include <iostream>using namespace std;int main() { char *str = new char[some_max_size_value]; cin >> str; cout << str; return 0;}
char *str = new char[some_max_size_value];
cin >> str;
cout << str;
字符串
2条答案
按热度按时间2g32fytz1#
你可以这样做:
字符串
然而,这也存在问题;主要是因为它使用了一个你必须管理的固定大小的原始数组。它还以非异常安全的方式手动管理数组的生存期,尽管这可以通过智能指针来修复。
型
完全从原始数组转移到管理自己资源的对象更好:
型
如果需要字符串中的
char const *
,可以使用std::string::c_str()
。型
或者,如果你真的需要一个
char*
,你可以这样做:型
mo49yndu2#
这将工作:
字符串