如何在 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 >> str
或 getline(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
#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 >> str
或 getline(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