vs2013的问题(scanf和一个只可以看图的问题)
昨天刚下了vs2013,各种不适应,之前用2010还好好的,2013有各种问题,一晚上遇到两个,第一个是scanf是不能用了么,bing上说是因为微软觉得scanf不安全倡导大家用scanf_s,不知道是不是这样的。第二,上图,我已经完全不知道错在哪里了,已晕 试试把%c,%c中间的","去掉 calton007 发表于 2014-8-22 23:12试试把%c,%c中间的","去掉
也不行,换成空格也不行。。是不是该砸电脑了 calton007 发表于 2014-8-22 23:12
试试把%c,%c中间的","去掉
异常代码: c0000005
Jack_McKing 发表于 2014-8-22 23:13
也不行,换成空格也不行。。是不是该砸电脑了
有没有可能是printf里面的\n的问题,试试去掉
抱歉,我电脑刚重装,没有装vs2013,不能调试 calton007 发表于 2014-8-22 23:18
有没有可能是printf里面的\n的问题,试试去掉
抱歉,我电脑刚重装,没有装vs2013,不能调试
好感谢你啊。。但是还是不行。不是这个的问题吧。。。调试也没说有错阿,也没有报错提示,我还没有见过系统出现的这种错误提示,好吓人阿,就和死机一样。 ....
scanf_s("%c,%c",&a,1,&b,1); elvo 发表于 2014-8-23 10:09
....
scanf_s("%c,%c",&a,1,&b,1);
啥意思啊那个1是,能解释一下么。。 elvo 发表于 2014-8-23 10:09
....
scanf_s("%c,%c",&a,1,&b,1);
确实成功了。。但是这是为什么呢。。 elvo 发表于 2014-8-23 10:09
....
scanf_s("%c,%c",&a,1,&b,1);
同样的问题,这回加1加1.0都试了都没用。。所以我还是不明白所以然
Jack_McKing 发表于 2014-8-23 12:25
同样的问题,这回加1加1.0都试了都没用。。所以我还是不明白所以然
你是一直都没有弄清楚scanf_s的用法,我可以点击下面这个地址去看看
http://msdn.microsoft.com/zh-cn/library/w40768et%28VS.80%29.aspx
里面有一句说得很明白了:Unlike scanf and wscanf, scanf_s and wscanf_s require the buffer size to be specified for all input parameters of type c, C, s, S, or [. The buffer size is passed as an additional parameter immediately following the pointer to the buffer or variable.
你给出的%lf又不在哪几个类型之中,就不需要指明buffer size了。你可以试一试 elvo 发表于 2014-8-23 12:57
你是一直都没有弄清楚scanf_s的用法,我可以点击下面这个地址去看看
http://msdn.microsoft.com/zh-cn/l ...
可是我又打开又试了一遍就行了,这是为什么啊,,你能不能尽量用中文解释一下。。 scanf_s当使用c, C, s, S, or [这几个参数类型的时候就要加一个大小值,其他不同。例如
scanf_s( "%d %f %c %C %s %S", &i, &fp, &c, 1,&wc, 1, s, 80, ws, 80 );
i,fp是%d,%f所以它们后面不加大小,c,wc,s,ws的分别参数类型%c,%C,%s,%S它们就要加大小值,这个也就体现了它不scanf安全的地方,都限定了边界,不让发生溢出 elvo 发表于 2014-8-23 14:42
scanf_s当使用c, C, s, S, or [这几个参数类型的时候就要加一个大小值,其他不同。例如
scanf_s( "%d %f % ...
这个大小值是不是得背啊。。大小值都是有规定的值?
我找到了一个解决方案#pragma warning(disable:4996)
#define _CRT_SECURE_NO_DEPRECATE
这两个貌似可以继续使用scanf,不过既然不安全我也想搞清楚scanf_s安全在哪好去用
太感谢你了,你讲的非常清楚。。是我级别太低听的一知半解,我明白了它因为数据容易益处所以不安全,但是那个大小值是固定的还是什么我还是不太明白。。 Jack_McKing 发表于 2014-8-23 15:01
这个大小值是不是得背啊。。大小值都是有规定的值?
我找到了一个解决方案#pragma warning(disable:4996 ...
#include <stdio.h>
int main( void )
{
int i,
result;
float fp;
char c,
s;
wchar_twc,
ws;
result = scanf_s( "%d %f %c %C %s %S", &i, &fp, &c, 1,
&wc, 1, s, 80, ws, 80 );
printf( "The number of fields input is %d\n", result );
printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c,
wc, s, ws);
result = wscanf_s( L"%d %f %hc %lc %S %ls", &i, &fp, &c, 2,
&wc, 1, s, 80, ws, 80 );
wprintf( L"The number of fields input is %d\n", result );
wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp,
c, wc, s, ws);
}
这是我之前给你那个网址上的程序,你把它看懂就学会scanf_s了,那个大小值buffer size不是靠背的或是猜的。。。至于完全,你有兴趣的话可以去看一看溢出方面的书,自己写一个shellcode elvo 发表于 2014-8-23 15:13
这是我之前给你那个网址上的程序,你把它看懂就学会scanf_s了,那个大小值buffer size不是靠背的或是 ...
就是没大看懂才请求你给点通俗易懂的解释。。那个大小值到底是多少我还是不太明白怎样规定的。。 本帖最后由 cheny3636 于 2014-8-26 12:57 编辑
1应该是代表指定scanf_s输入长度,用VS2013可以在建立项目的时候不勾选安全开发生命周期就可以用scanf了 cheny3636 发表于 2014-8-26 12:48
1应该是代表指定scanf_s输入长度,用VS2013可以在建立项目的时候不勾选安全开发生命周期就可以用scanf了
那输入长度是如何规定的呢。
页:
[1]