strcat_s函数执行出错为什么是弹出异常框而不是小弟我们自己检查返回值知道出错
strcat_s函数执行出错为什么是弹出错误框而不是我们自己检查返回值知道出错我仿照这个写了下面的程序:别的
strcat_s函数执行出错为什么是弹出错误框而不是我们自己检查返回值知道出错
我仿照这个写了下面的程序:
别的我英文不好没看懂,就看懂红线的,就是缓冲区太小的意思,这是预料之内,本来就是为了测试缓冲区太小的情况。不过为什么不是在返回值中体现错误,我们检查返回值获知错误,而是出来一个错误提示框呢??
我再试一下,去数了一下连接之后的字符串应该是多长,51个字符(包括结尾的\0),我把size常量改成51就没有任何提示运行成功。
是我对书的内容理解错了吗?如果是弹出个框来表示错误,还检查什么返回值?程序都中断了~~求解释
[解决办法]此外,你那本书中所说并不准确,根据MSDN所说:
If strDestination is a null pointer, or is not null-terminated, or if strSource is a NULL pointer, or if the destination string is too small, the invalid parameter handler is invoked, as described in Parameter Validation . If execution is allowed to continue, these functions return EINVAL and set errno to EINVAL.
只有在“invalid parameter handler”允许程序继续时,才会返回错误代码。而缺省的“invalid parameter handler”程序会中止程序。自定义的“invalid parameter handler”通过调用_set_invalid_parameter_handler来设置。
并且在Debug版本中,一定会导致断言失败而中止。
因此,这个函数的设计并不是让你用来检查返回值来判断失败的,它的用途就是帮助我们发现代码中的错误,然后改掉它。
[解决办法]
楼主,书中所说并非错误,只是没有告诉你所有的事情。
这个对话框的行为是可以修改的,从而可以让你获得需要的错误码,只要加入如下这个宏就行:
_CrtSetReportMode( _CRT_ASSERT, 0 );