string 问题

sadadi 2014-05-23 09:27:33

char *p="asdfag";
string str="sdf";
str+="asdgvsd";//这个追加在编译时不会有错
cout<<str;//为什么这里会显示无匹配操作符,编译是怎么编译的
printf("%s",str);//当改为printf输出时为什么初始赋值是乱码,后面添加的字符串有错


求大神解答
...全文
124 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-05-23
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! 单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。 VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
cao_julians 2014-05-23
  • 打赏
  • 举报
回复
等效与等价! 有位网上writer(高手!)用过”等效与等价“的说法及相关探讨。 等效是指,两个形式上不同的讨论对象,在某些情况下有同样(或者相似)的效果,但并不能将这种相同、相似扩展到所有情况下 等价是指,两个形式上不同的讨论对象,在所有情况下是相同的,即实际上这两个对象本质上是同一个、而形式上不同而已(典型例子就是一维数组元素引用时的a[i]与*(a+i)) char*(char [ ])对象与string 对象是等效关系,某些时候是有相同效果,但不是等价关系。
Symfund 2014-05-23
  • 打赏
  • 举报
回复
楼主要散分哦,至少给我一半的分!
图灵狗 2014-05-23
  • 打赏
  • 举报
回复

#include <cstdio>
#include <string>
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
	string str= "sdf";
	str += "asdgvsd"; // string类型支持+=运算符重载操作
	cout << str << endl; // cout会根据str的类型智能输出
	printf("%s\n",str.c_str()); // printf支持的是C字符串,因此需要用c_str进行转换

	return 0;
}
漂浮一生 2014-05-23
  • 打赏
  • 举报
回复
你看是不是加掉了头文件string
#include <iostream>
#include <string>
using namespace std;

int main()
{
	char *p = "asdfag";

	string str = "sdf";
	str += "asdgvsd";

	cout << str << endl;

//%s输出的是字符串,后面要有'\0',而string类型是没有'\0'的,要做一个转换
	printf("%s", str.c_str());
								
	return 0;
}
Falleyes 2014-05-23
  • 打赏
  • 举报
回复
首先,string是一个类,char* 是一个指针类型。 string对+=进行了+的操作符重载,我记得+=会因为+重载了而自动重载。在这里,+=就相当于string.h中的strcat,是对字符串的拼接。 string应该使用流操作,即cout<<str;显示没有匹配操作,是因为楼主没有引用string头文件,或者其他可能的原因。在string类中,对<<操作符的重载是已经有的。左操作数为流对象引用,右操作数为string对象。
TheNewIpad 2014-05-23
  • 打赏
  • 举报
回复
cout<<str;//为什么这里会显示无匹配操作符,编译是怎么编译的 string 类的 << 重载定义声明和实现在<string>中,楼主包含了这个头文件了没啊? printf("%s",str);//当改为printf输出时为什么初始赋值是乱码,后面添加的字符串有错 string通过printf打印不是这么干的 应该是 printf("%s", str.c_str());
Symfund 2014-05-23
  • 打赏
  • 举报
回复

char *p="asdfag";
string str="sdf";
str += "asdgvsd";//这个追加在编译时不会有错
cout << str.c_str();//为什么这里会显示无匹配操作符,编译是怎么编译的
printf("%s",str.c_str());//当改为printf输出时为什么初始赋值是乱码,后面添加的字符串有错
str += "asdgvsd";//这个追加在编译时不会有错,是因为string类重载了操作符+=,支持char *类型 cout << str.c_str();//为什么这里会显示无匹配操作符,编译是怎么编译的 -> cout 不支持string数据类型,支持char, char*类型 printf("%s",str.c_str());//当改为printf输出时为什么初始赋值是乱码,后面添加的字符串有错 -> printf只支持char, char *类型。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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