使用scanf输入string字符串的注意事项

最近刷题总遇到输入字符串用不了的问题,后来发现了一些端倪,于是编写了下面函数验证:


研究用c和c++模式输入string

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str_scanf,str_cin;
	printf("str_scanf:");
	scanf("%s",str_scanf.c_str());//c方法输入
	printf("str_cin:");
	cin>>str_cin;//c++方法输入
	printf("\n");
	
	//c方法字符串属性
	printf("%s len:%d\n",str_scanf.c_str(),str_scanf.length());
	cout<<str_scanf<<" len:"<<str_scanf.length()<<endl;
	if(str_scanf=="abc")
		cout<<"str_scanf=abd"<<endl<<endl;
	else
		cout<<"str_scanf!=abd"<<endl<<endl;
	
	//c++方法字符串属性
	printf("%s len:%d\n",str_cin.c_str(),str_cin.length());
	cout<<str_cin<<" len:"<<str_cin.length()<<endl;
	if(str_cin=="abc")
		cout<<"str_cin=abd"<<endl<<endl;
	else
		cout<<"str_cin!=abd"<<endl<<endl;
	return 0;
}

运行结果
在这里插入图片描述
个人推测使用在scanf输入字符串使用string.c_str()方法,是直接改变了字符串对象指向的char类型的一段地址,这时跳过了string规定的输入方式,无法改变string对象的长度等成员变量属性(这也是为什么字符串长度为0,判“==”失效,且用cout无法输出)。而string对cin输入进行了兼容,所以在输入值的同时,string对象的属性也随之改变了。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值