使用scanf_s输入得到一行带空格的字符串

本文探讨了scanf_s函数如何从stdin读取格式化的数据,特别强调了它与scanf的区别在于使用了具备长度检查功能的_input_s_l函数。通过示例,展示了参数列表中的字符串地址和限制长度,并解释了在vscanf函数中的处理过程,揭示了输入后_iob中的地址变化情况。
摘要由CSDN通过智能技术生成
测试环境:VS2012 Update4
测试语言:C++
测试代码:

#include<stdio.h>
int main(int argc,char* argv[])
{
	char str[20];
	scanf_s("%s",str,18);
	return 0;
}

在第五行下断点,断下之后我们观察一下 str
地址:0x003DF9B8
内容如下,处于未初始化状态



接着F11进去,进入  scanf_s 函数
/***
*int scanf_s(format, ...) - read formatted data from stdin
*
*   Same as scanf above except that it calls _input_s_l to do the real work.
*   _input_s_l has a size check for array parameters.
*
*******************************************************************************/
int __cdecl scanf_s (
        const char *format,
        ...
        )
{
        va_list arglist;
        va_start(arglist, format);
        return vscanf(_input_s_l, format, NULL, arglist);
}


从注释中我们可以看到 scanf_s的功能是从stdin中读取格式化的数据
TA 和 scanf 的区别是用了_input_s_l函数,而这个函数有一个长度检查的功能(scanf用的是 _input_l)。
format :参数格式

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值