关于scanf 读取string 的问题

fztfztfzt 2014-09-23 09:33:09
从控制台读入到字符串中
#include <stdio.h>
#include <string>
using namespace std;

int main()
{
string a;
scanf("%s", &a);
puts(a.c_str());
return 0;
}

1.这种写法,输入一串字符,a仍然为"";
应该要先分配空间,a.resize();//为什么用cin就不要分配空间?
2.scanf这句要写成scanf("%s",&a[0]);为什么?&a与&a[0]有什么区别?
...全文
98 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
滴答滴答D 2014-09-23
  • 打赏
  • 举报
回复
楼主 没有理解 对象的概念 cin >> s 那是 istream 这个类重载了 operator >> (string &s) 这个符号
brookmill 2014-09-23
  • 打赏
  • 举报
回复
首先,没必要深究这个问题。string是个类,内部的复杂实现不是scanf能处理的,就简单的用cin就好了。 1. cin>>str,这是个运算符重载,在重载函数里面cin对于string类会有特定的处理,比如调用resize。scanf就做不到这个。 2. a是个类,不是数组。&a是这个类对象的地址。而&a[0]是a[0]的地址。这又是个运算符重载,对于string类,a[0]不是像数组那样简单的做*(a+i)的运算,而是要返回第一个字符。这个字符所在的位置未必就是a的地址。

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧