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

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

#include<iostream>

using namespace std;

int main() {
    string str;
    gets_s(str);
    cout << str << endl;
    return 0;
}

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

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

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

gets_s() 有两个参数:指向 char 数组的指针和最大大小(您的调用缺少它)。您不能传递 std::string - 只能传递 C 风格的字符串。

为什么不使用 C++ 方式 std::cin >> strgetline(std::cin, str) 而不是 C 函数?


在 C 中也不要使用 gets_s()(它在 C11 中是可选的)或 gets() - 请改用 fgets()

C 函数 get_s 采用 char* 和长度参数,而不是 std::string

您的最佳选择是:

  • 格式化输入:

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

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

gets_s 有一个很大的限制,您必须为要阅读的字符数提供上限。

由于您使用的是 string,更好的选择是使用 getline

#include <iostream>
#include <string>
using namespace std;

string str;
getline(cin, str);

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

嗯,关于std::getline的回答有很多:

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