不安全函数(scanf)
VS2019中不能直接使用scanf等C标准库函数
因为vs使用更安全的c11标准, 认为这类函数不安全。
- 解决方案:
1.方法1:使用修改项目的属性,直接使用这些“不安全”的函数。
添加: /D _CRT_SECURE_NO_WARNINGS
2.方法2:使用c11标准中的“更安全”的函数
scanf_s
#include <stdio.h>int main(void) {
int num;char a[64];//scanf("%d", &num); //解决方法, 使用scanf_s()scanf_s("%d", &day); //整数类型不需要在尾部添加长度scanf_s("%s", a, 64); //字符数组需要在尾部添加数组的长度system("pause");return 0;
}
gets不能使用
使用gets_s
gets是老标准C语言函数,vs使用更安全的c11标准, 使用对应的gets_s
char line[32];
gets_s(line, sizeof(line));
cin >> 的返回值
((cin >> word) == 0) 在VS中不能通过编译
#include <iostream>
#include <string>
#include <Windows.h>using namespace std;int main(void) {
string word;int count = 0;int length = 0;cout << "请输入任意多个单词:";while (1) {
if ((cin >> word) == 0) {
//在 vs中不能通过编译break;}count++;length += word.length();}cout << "一共有" << count << "单词" << endl;cout << "总长度:" << length << endl;system("pause");return 0;
}
解决方案:
- 把 if ((cin >> word) == 0) 修改为:
- if ((bool)(std::cin >> word) == 0)
或者修改为: - if (!(cin >> word))
getline的返回值
(getline(cin, line) == 0) 在VS中不能通过编译
#include <iostream>
#include <string>
#include <Windows.h>using namespace std;int main(void) {
string line;int lineCount = 0;int length = 0;cout << "请输入任意多行:";while (1) {
// 遇到文件结束符时, 返回NULL(0)if (getline(cin, line) == 0) {
// 在VS中不能通过编译break;}lineCount++;length += line.length();}cout << "一共有" << lineCount << "行" << endl;cout << "总长度: " << length << endl;system("pause");return 0;
}
解决方案:
- 把if (getline(cin, line) == 0) {修改为:
- if ((bool)getline(cin, line) == 0) {
或者修改为: - if (!getline(cin, line)) {