文章类型: VC&C++
关键词: VC,VC++,C++,printf,cout,string,C,语言,乱码
内容摘要: 今天才发现printf不能直接输出string类型

VC++中使用printf输出出现乱码的解决思路

2016/9/23 14:15:46    来源:apple    阅读:

结论:

printf("%s", str.c_str());
因为printf里面要求是char*类型,string和char*是不一样的

近期研究设计模式,在程序输出时心血来潮用了c版本的printf,结果就蛋疼了,一直输出是乱码,

string s = "中国";

printf("%s" , s);//输出乱码


于是果断切换成c++版本的cout发现可以正常输出。于是上网找答案,居然惊讶的发现printf输出字符串是针对char *的,换言之,printf只能输出C语言中的内置数据,string不是C语言内置数据。更深入的来说:s这个string类型的对象并非单单只有字符串,其内还有许多用于操作的函数,于是&s并非字符串“中国”的首地址,而是s这个对象的首地址。

所以要做如下操作:

string s = "中国";

printf("%s" , s.c_str());//string中c_str()成员方法返回当前字符串的首字符地址

或cout<<s;//string中重载了“<<”操作符

上面的内容是我摘录别人的回答思路。我自己遇到的问题是:在VC++中使用MFC的控制台程序中使用printf输出string类型的中英文数据均正常,但是我从MSSQL数据库(数据库为:sql server 2008 r2)中获取的数据输出时出现乱码,经过跟踪发现从数据库得到的数据是正常的,但是用printf格式化后向控制台输出时出现乱码,换成cout输出使用显示均正常。经过调查即上面提到的解释,使用string的c_str()函数转换后进行正常输出,看来上面的说法解释不假,再此得到了验证。

↑ 上一篇文章:VC++中的转义字符以\开头的 关键词:VC++中的转义字符以\开头的 发布日期:2016/9/23 9:24:40
↓ 下一篇文章:VC++中将CString转换成const char*的一种有效方法 关键词:VC++,CString,转换,const,char 发布日期:2016/9/23 15:26:03
相关文章:
vc++ C函数atoi和itoa的用法总结 关键词:vc++,C函数,atoi,itoa,用法,总结,integer,string,signal,语言 发布日期:2017-09-26 17:32
vc++ string处理大全 关键词:vc++,处理,大全,string,date,float,语言,byte 发布日期:2016-09-22 14:22
(VC++) CString Format的用法 关键词:(VC++),CString,Format,用法,Windows,MFC,C++,程序 发布日期:2017-09-04 14:42
相关目录:.NETVC&C++软件开发
我要评论
正在加载评论信息......