如何在C++中将字符串传递给gets_s()

How to pass string to gets_s() in C++?

本文关键字:gets C++ 字符串      更新时间:2023-10-16
#include<iostream>
using namespace std;
int main() {
string str;
gets_s(str);
cout << str << endl;
return 0;
}

当我尝试运行上面的代码时,它抛出了一个错误,即没有gets_s()的实例与参数列表匹配。如果可能的话,我如何将std::string而不是char[]传递给gets_s()函数?

C函数get_s接受一个char*和一个长度参数,而不是std::string

您的最佳选择是:

  • 格式化输入:

    std::cin >> str;
    
  • 读取一行:

    std::getline(std::cin, str);
    

不要那样做。以正常方式使用流:

#include<iostream>
using namespace std;
int main()
{
string str;
cin >> str;
cout << str << endl;
return 0;
}

gets_s有一个显著的限制,即必须提供要读取的字符数的上限。

由于您使用的是string,因此最好使用getline

#include <iostream>
#include <string>
using namespace std;
string str;
getline(cin, str);

这将扩展字符串以容纳用户输入的尽可能多的字符。

gets_s()接受两个参数:指向char数组的指针和最大大小(您的调用缺少它(。不能传递仅std::string的C样式字符串。

为什么不使用C++方式std::cin >> strgetline(std::cin, str)来代替C函数呢?


在C中也不使用gets_s()(在C11中是可选的(或gets(),而是使用fgets()

关于std::getline有很多答案,但如果您真的需要使用get_s,您可以编写这样的代码:

size_t length = 10; // Just for example
std::string my_string(length, 0);
get_s(&my_string[0], length); // C++14 and older
get_s(my_string.data(), length); // C++17 and newer