如何在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()
函数?
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 >> str
或getline(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
相关文章:
- Turbo C++ cin() 不能与 gets() 一起使用
- 一起使用 GETS 和 CIN
- 在C/C++中检查数字是否为整数(不带scanf/gets/etc)
- gets() 二维数组
- gets() 不允许先执行 cout
- 如何解决"identifier 'gets'/'clrscr' is undefined"问题?
- gets()未在作用域中声明
- QJsonValue gets empty
- CPP中如何使用get gets()
- gets() 和 getch() 有什么区别?
- gets() 在第一次循环迭代中不起作用,但在后续迭代中工作
- 为什么gets()需要更多的字符
- gets() 不接受输入
- 函数中的 gets() 在第二次使用后被跳过
- Gets()导致内存损坏
- 为什么第一个gets()在这段代码中不起作用?
- dev 为什么在 dev c++ 中使用 "cin function" 后我无法使用"gets function"?
- 它的gets()被认为是C函数或c++函数
- getline(cin.name) gets skipped
- gets()中的错误,不是编译错误,而是无法接收输入