scanf对于string的坑点

本文探讨了在C++中使用scanf函数读取string类型变量时遇到的问题,解释了由于string默认大小为0导致的输出异常。通过示例展示了如何使用scanf与string结合,以及使用cin读取string的差异。分析了gets()函数同样可能导致的问题,并提出了通过预设string大小的解决方案,如使用str.resize()避免数组越界。
摘要由CSDN通过智能技术生成

定义 string str;
并使用scanf("%s", &str[0])进行读入

	scanf("%s", &str[0]);
	printf("%s", &str[0]);    //正常输出
	cout<<str;//输出为空,但是如果使用cin读入str会正常输出

用类似gets()读入也会造成这样的情况

我猜想,这些函数原本只是适用于字符数组,其大小是已经确定了的,读入不会改变数组的大小(废话,确定了怎么改变),但是string的默认大小是0,使用类似胡scanf对数组进行读入的操作并不改变其大小,cout根据大小进行输出(导致什么也没输出),printf根据是否读入‘\0’来终止输出,然后就造成了这样的情况。

解决方案,先确定一下string大小

	str.resize(10010);

就ok了,说实话应该上面的操作会造成数组越界。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值