关于C++中string作参数的问题

a88532060a 2009-06-18 12:22:53

赋值时传入“aaaa”
作为参数传入某函数中,,在此函数中输出则输出“a”,或者“a”后面跟一堆乱码

这是我的函数声明int LocateByString(void* List,int type,std::string string);

函数调用如下std::string name;
scanf("%s",&name);
Locate_=LocateByString(List,type,name);

知道的帮忙下哈,,,,关于string类型作参数有什么需要注意的地方么?
...全文
207 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liao05050075 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 a88532060a 的回复:]

但是读入没问题饿。。。。就是用string作参数时出了问题。。。

调用函数之前好好的。。和读入的一样

调用之后,在函数里面输出就成乱码了
[/Quote]
看似没事,但是事实是出事了。

因为string类的对象有很多属性和方法,它不单单是一个字符串那么简单的。
所以,你用读C的字符串的方法来读入string是绝对不行的。
link_biao 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 a88532060a 的回复:]
引用 5 楼 liao05050075 的回复:
既然是C的课程设计,那你又怎么能用C++的string呢?
我觉得用scanf来读入一个string是绝对不行的



但是读入没问题饿。。。。就是用string作参数时出了问题。。。

调用函数之前好好的。。和读入的一样

调用之后,在函数里面输出就成乱码了
[/Quote]
他的意思是说C里面没有srting,应该用字符数组。
a88532060a 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liao05050075 的回复:]
既然是C的课程设计,那你又怎么能用C++的string呢?
我觉得用scanf来读入一个string是绝对不行的
[/Quote]

但是读入没问题饿。。。。就是用string作参数时出了问题。。。

调用函数之前好好的。。和读入的一样

调用之后,在函数里面输出就成乱码了
liao05050075 2009-06-18
  • 打赏
  • 举报
回复
既然是C的课程设计,那你又怎么能用C++的string呢?
我觉得用scanf来读入一个string是绝对不行的
a88532060a 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Proteas 的回复:]
scanf("%s",&name);
name 是对象。
需要读到缓冲区,然后将缓冲区赋值给 name。
[/Quote]

能不能给个例子哈
a88532060a 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liao05050075 的回复:]
string是C++的类,你怎么用
c的scanf()来读入呢?
改用cin>>name;
[/Quote]

因为是c的课程设计哈,,,,不想用iostream。h
只好这样子了,,,
输出读入的字符串也没问题哈,,,
Proteas 2009-06-18
  • 打赏
  • 举报
回复
scanf("%s",&name);
name 是对象。
需要读到缓冲区,然后将缓冲区赋值给 name。
liao05050075 2009-06-18
  • 打赏
  • 举报
回复
string是C++的类,你怎么用
c的scanf()来读入呢?
改用cin>>name;
jhony_lee 2009-06-18
  • 打赏
  • 举报
回复
既然是用c,那就别用STL了,c中的字符串有一个结束符,string没有结束符,可能是这个问题。
pathuang68 2009-06-18
  • 打赏
  • 举报
回复
经过测试,

string name;
scanf("%s",&name);

这样name是不能正确得到输入的数据的,你可以这样写:

void LocateByString(string name)
{
cout << name << endl; // 传入的name可以正确输出
}
int main(void)
{
string name;
cin >> name;

LocateByString(name);

return 0;
}

或者下面这样也可以:

void LocateByString(string name)
{
cout << name << endl;
}
int main(void)
{
char str[100];
string name;
scanf("%s", str);

name = str;

LocateByString(name);

return 0;
}

65,210

社区成员

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

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