VS2017使用scanf |
您所在的位置:网站首页 › C语言发生访问冲突 › VS2017使用scanf |
#include
#include
int main(){
char *str= (char *)malloc(20*sizeof(char));
scanf_s("%s", str);
printf("%s\n",str);
}
在使用VS2017时,应编译器要求需使用更加安全的scanf_s代替scanf,然而习惯scanf的语法后老是被这个scanf_s坑,特别是在写入字符串数组或者其它数组时经常会被坑,如上如所示。上述代码编译器不会报错,但调试时却出现图片中的异常,原因却是scanf_s在使用数组指针作为写入变量地址参数时,还需要加一个buffer长度参数,更安全(C程序员随时都要考虑内存溢出问题)如下所示: #include #include int main(){ char *str= (char *)malloc(20*sizeof(char)); scanf_s("%s", str,20); printf("%s\n",str); }现在就可以愉快地使用scanf_s了! 特别注意在使用scanf_s时,buffersize参数大小必须和定义的字符串数组一致,否则会出错读入乱码 char buf[10]; scanf_s("%s",buf,10);这里的参数10必须是与buf的大小一致,不能是小于10,也不能大于10,表示最多允许读入9个字符,最后一个自动加‘\0’, 输入 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |