编译器vs2017有很多要求都和别的编译器不一样,记录一下这些不同的地方。
1.strcat函数
如下列代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str1[30] = "People's Republic of ";
char str2[6] = "China";
printf("%s", strcat_s(str1, str2));
system("pause");
return 0;
}
按照vs2017对于安全性检查的要求这里strcat要用strcat_s,但是改成strcat_s后打印的结果是
这串代码在别的编译器上用strcat是正确的所以我就用
#pragma warning(disable : 4996)
禁用了vs2017对strcat_s的安全性检查
结果就没有问题了。
另外一种解决方案如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str1[30] = "People's Republic of " ;
char str2[6] = "China" ;
str1[40] = strcat_s(str1, str2);
printf("%s", str1);
system("pause");
return 0;
}
将str1[40]替换为strcat_s(str1,str2)然后直接打印str1得到的结果也是正确的。
2.scanf_s("%s")输入字符串
#include <stdio.h>
#include <stdlib.h>
#define PRAISE "You are an extraordinary being."
int main(void)
{
char name[40];
printf("What's your name?\n");
scanf_s("%s",name);
printf("Hello,%s.%s\n", name, PRAISE);
system("pause");
return 0;
}
如上代码,如果在别的编译器上会直接运行成功但是在vs2017上运行则会出现这种情况
向编译器输入字符串后无法执行后续操作了
解决办法时在scanf_s("%s", name);的括号部分name后面加上字符串的长度,即改为
scanf_s("%s",name,40);
才可以运行成功,结果为
这是我使用vs2017以来所了解到的各项与别的编译器不同的要求。