c语言-scanf问题 scanf和scanf_s的区别

scanf这个是复标准输入输出里面的函制数哦,它是标准C(ANSI C标准)定义的接口函数,WINDOW,LINUX/UNIX,MAC都提供这个接口函数,但是scanf_s这个东西,嘿嘿,万恶的微软,你懂的,你用了你就绑死在WINDOW上了
也许scanf真的不安全,但是和可移植性相比呢?而且,scanf_s这个东西安全?

❷ C语言函数scanf_s能不能输入多个字符串

void main(){
char s[10],ss[10];
scanf_s("%[^复,],%s",s,10,ss,10);
printf("%s %s",s,ss);
}
因为你制需要输入逗号,所以对逗号应该特别处理.

❸ C语言,scanf("%*s")

表示你输入错了(不是数字)时把错误符号从输入缓冲区里吸收掉,再由后面的两行告诉你重新输入……

❹ 为什么c语言中char*s;scanf("%s",s)是错的

出现错误的原因是s声明的是一个char型指针,没有指向一块开辟出的地回址空间,系统随机了答一个地址给s,对这个随机的地址的空间进行赋值是非法的,所以出错。

修改如下,先将s指向一块开辟的地址空间之后再对其进行赋值。

char*s=(char*)malloc(100);//100为开辟空间大小
scanf("%s",s);

❺ C语言scanf与scanf_s

void scan改成这个
void scan(char **a)
{
scanf("%s",*a);
}
调用时用scan(&a);应该就可以了吧,这里的指针是局部值,用指针的指针来传递指针的值试试

❻ C语言中 scanf_s和 scanf 区别是什么非常感谢

scanf()函数是标准C中提供的标准输入函数,用以用户输入数据
scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始,VS系统提供了scanf_s()。在调用该函数时,必须提供一个数字以表明最多读取多少位字符。
原因和区别:
scanf()在读取数据时不检查边界,所以可能会造成内存访问越界:
//例如:分配了5字节的空间但是用户输入了10字节,就会导致scanf()读到10个字节char buf[5]={'\0'};scanf("%s", buf);//如果输入1234567890,则5以后的部分会被写到别的变量所在的空间上去,从而可能会导致程序运行异常。以上代码如果用scanf_s()则可避免此问题:
char buf[5]={'\0'};scanf_s("%s",buf,5); //最多读取4个字符,因为buf[4]要放'\0' //如果输入1234567890,则buf只会接受前4个字符注: scanf_s最后一个参数n是接收缓冲区的大小(即buf的容量),表示最多读取n-1个字符.
PS: 很多带“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素,防止hacker利用原版的不安全性(漏洞)黑掉系统。

❼ C语言程序使用scanf_s输入字符串按回车弹出警告

//scanf_s("%s%s",p,q);
scanf_s("%s",p);
scanf_s("%s",q);

拆成两次来输入吧。。自错误报的是访问冲突,两个指针都指向一起了,现在多核多线程,可能两个同时在写同一个内存。(试试看吧)

❽ C语言中 scanf_s和 scanf 区别是什么

1、使用区别

scanf()不会检查输入边界,可能造成数据溢出。

scanf_s()会进行边界检查。

2、意思

scanf表示从键盘输入指定格式的数据。如:scanf("%d",x);指从键盘给x输入一个int型(整型)数据;scanf("%f",x);指从键盘给x输入一个float型(实型)数据;
对应的输出为:printf按照指定的格式输出数据;如printf("%d",x);指按整型数据输出X中的值。

因为带“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素,防止hacker利用原版的不安全性(漏洞)黑掉系统。

3、scanf_s()参数与scanf()不同

例如scanf(“%s”,&name,n),整形n为name类型的大小,如果name是数组,那n就是该数组的大小。

❾ c语言scanf和scanf_s的区别,详解

scanf是标准库函数
scanf_s 是vs的库函数 微软认为c标准的scanf_s不安全 自己做的
比如给字内符串容写值的时候必须确认 数组大小 防止访问越界
char d[20];
scanf("%s",d);
scanf_s("%s",d,20);