string用printf输出会带乱码为什么?

微雪缤纷 2007-03-22 11:35:17
使用vs2003编译
int _tmain(int argc, _TCHAR* argv[])
{
string str("abcabc\n");
cout << str;
printf("%s ", &str);
}
输出时结果:
abcabc
烫烫abcabc

为什么用printf会有乱码呢?

当然改成printf("%s ", str.c_str());就好了,初学不太懂这是为什么请高手指教!
...全文
1563 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2007-03-23
  • 打赏
  • 举报
回复
把合适的东西用在合适的地方,
不要想着怎么把不合适东西怎么用上来 ......
jixingzhong 2007-03-23
  • 打赏
  • 举报
回复
c_str
Syntax:

#include <string>
const char* c_str();

The function c_str() returns a const pointer to a regular C string, identical to the current string. The returned string is null-terminated.

Note that since the returned pointer is of type (C/C++ Keywords) const, the character data that c_str() returns cannot be modified.
jixingzhong 2007-03-23
  • 打赏
  • 举报
回复 1
string 是被封装好的,
你不能象操作 char 数组那样操作它!
Dugowe 2007-03-23
  • 打赏
  • 举报
回复
对啊,可能c语言里并名优string,然后printf()没有重载这个类型,
str.c_str()

const char *c_str();
c_str()函数返回一个指向正规C字符串的指针, 内容与本字符串相同.
iamcaicainiao 2007-03-23
  • 打赏
  • 举报
回复
#include <iostream>
#include <string.h>
using namespace std;

int main(int argc, char * argv[])
{
string str("abcabc\n");
char* a="aaaaaaaaa";
cout <<str;
printf("%s", a);
return 0;
}
--------------------------------
也就是说,string并不等同于char *。
taodm 2007-03-23
  • 打赏
  • 举报
回复
因为string不是char *什么的,你必须按string的方式使用string。

“在VS2005下没事啊,你试试printf("%s ", str);”你把str的内存加大到128个字符再试试吧。
orc1984 2007-03-23
  • 打赏
  • 举报
回复
你可以不用vs2003
直接去掉&
xlbdan 2007-03-23
  • 打赏
  • 举报
回复
int _tmain(int argc, _TCHAR* argv[])
{
string str("abcabc\n");
cout << str;
printf("%s ", &str);
}

string是一个类,封装好的,之所以可以cout<<str,是因为string类也支持这个重载的友元输入输出函数,而你如果用printf来调用的话,它可不支持重载的输出操作,而string又不是内置类型,printf不认得它,所以有问题发生
0黄瓜0 2007-03-23
  • 打赏
  • 举报
回复
纯粹是错误的用法.
string str("abcabc\n");

str 对象中包含一个指向"abcabc\n"的指针,
&str得到的是这个对象的地址,不是"abcabc\n"的地址


微雪缤纷 2007-03-23
  • 打赏
  • 举报
回复
哎,说白了是我看不懂string的源码。结了吧!按常规的玩着先
微雪缤纷 2007-03-23
  • 打赏
  • 举报
回复
感谢大家的帮忙,我之所以这样问是因为不理解为什么?
感觉糊里糊涂的总是不太好
mochen5460 2007-03-22
  • 打赏
  • 举报
回复
在VS2005下没事啊,你试试printf("%s ", str);

64,683

社区成员

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

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