Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何像写入字符[]一样写入字符串_C++ - Fatal编程技术网

C++ 如何像写入字符[]一样写入字符串

C++ 如何像写入字符[]一样写入字符串,c++,C++,例如,如果我有此功能: void read(std::string& s) { std::cin >> s; } 以及输入 first sentence s将只包含“first” 如果我用的是: void read(char array[100]) { std::cin.get(array, 100); } 对于相同的输入,我会得到“第一句话” 使用std::string有没有办法达到同样的效果 可能会发生这种情况(我认为),因为cin.get with

例如,如果我有此功能:

void read(std::string& s)
{
    std::cin >> s;
}
以及输入

first sentence
s将只包含“first”

如果我用的是:

void read(char array[100])
{
    std::cin.get(array, 100);
}
对于相同的输入,我会得到“第一句话”

使用std::string有没有办法达到同样的效果

可能会发生这种情况(我认为),因为cin.get with char[]会占用所有字符,甚至是空格,因为它在检测到行尾字符时结束,而cin with string在遇到空格字符时停止。(就像cin>>与char[]一起使用时所做的一样)

所以,我想我需要一个cin.get(),它可以用于std::string

我正在考虑读入一个char数组,然后使用字符串的char*构造函数,以便将char数组转换为字符串,但我认为可能有更好的方法


您可以使用getline输入整个字符串
std::getline(std::cin,s)


使用上面的代码来阅读整行而不是第一个单词。

std::getline(std::cin,s)
将一行读入字符串。@Eljay是的,这就是答案。非常感谢:)提示:不要传入任意大小的数组,如
char数组[100]
。只要做
char*array
char array[]
,你喜欢什么都行。如果相关,则应将大小指定为单独的参数。@tadman I每次都使用char*、new、delete动态分配内存。这只是为了测试目的。虽然我不知道char数组[],但我会研究一下,谢谢:在C++中,尽可能远离C字符串,缓冲区溢出是一个噩梦,<>代码> STD::String 很好地解决了这个问题。当您确实需要使用它们时,
char*
char[]
版本会清楚地表明它们的长度是任意的,除非另有规定,否则应该这样处理它们。在执行任何读取或写入操作时,始终传递一个大小参数,该参数指示这些文件的大小,以避免导致突然分段错误或更糟的溢出。没错,现在它可以工作了。谢谢:)我会尽快接受你的回答。请不要使用
名称空间std
。养成这种坏习惯是不好的。
void read(std::string& s)
{
    std::getline(std::cin, s);
}
using namespace std;

void read(string& s) {
    getline(cin, s);
}