c++中string和char的主要区别在哪?

 我来答
Ciedecem
2011-12-29 · 超过20用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:50.1万
展开全部
C++中的char是个基本类型,跟int一样;而string却是个库自带的类,声明的变量是个对象,但不需要程序员自动析构。他们都可以被自动初始化,但还是手动初始化更保险,免得使用不当,引起coredump
下面是c 中字符串与C++字符串的区别。希望下面的state能clarify your issue. :)
1)
在C语言中,将字符串作为字符数组来处理。即C string就是 char arrary[MAX_SIZE];字符数组。
而C++中的string 是 string class, 声明形式 string strObject.变量是个对象。只是他是C++ 标准库提供的string类,
其实现效果跟用户自定义的类一样。

2) C string 字符串可以用字符串数组 char Array[MAX_SIZE];与字符串变量 char *p; 两种方式来存储。
以 '\0'为字符串结束标志。
strlen 是把串结束符 '\0'算在内的,而sizeof是在对字符数组和字符变量的操作结果不一样,引起原理不一样。
strcmp, strncmp,连接使用strcat, 不能 str1+str2, strncat
strcpy, stncpy; strchr(str1, ch); 在str1中查找ch第一次出现的位置,返回指针变量
而C++ string是类,是对象.结束符是npos,或者-1;
不用指定字符数目的大小。
+ 取代了strcat
length和size取代了strlen
append, compare, substr,find, find_firt_of等函数
可以直接=, 而不用strncpy。
insert, replace, at, erase, clear, swap还有iterator函数的实现。

3)在函数实现部分
printf,scanf, fprinf等可以format的一个字符串中使用 "%s"时,只能用c string;如果是C++ string的话,就必须先变成

c string,否则就会报错。如:
a)
string str ("Test string");
printf("%s\n", str);
编译错误:warning: cannot pass objects of non-POD type 'struct std::string' through '...'; call will

abort at runtime
执行错误:Illegal instruction(coredump)

b)
void strprint(const char *s)
{
printf("function: %s\n%", s);
}
string str ("Test string");
strprint(str);
编译错误:error: cannot convert 'std::string' to 'const char*' for argument '1' to 'void strprint(const

char*)'
因为c string是基本类型:char 或char array;而c++ string却是个类,是个对象。二者的实现截然不同,不同场合的使用需

要转换。
修改:只需要将a), b)中的str变为 str.c_str()即可。
对了这个C++ string的c_str()函数能给出c string 和C++ string的部分区别的解释。

4.头文件
只有在使用c string的strncpy, strtok等库函数时才include <string.h>
而C++中,则在声明 string 对象时include <string>
百度网友34ea49a
2011-12-29 · TA获得超过894个赞
知道小有建树答主
回答量:297
采纳率:100%
帮助的人:397万
展开全部
'a'是char, "a"是char string,这两者都是普通的字符和字符串,和C中没什么不同
值得注意的是后者包含两个字符,末尾有一个隐身的'\0'

而:string str = "a" 是C++ string
注意:C++中的char string和string不是一回事

当用到了"string"这个关键词,就不是普通的字符串,而是用到了封装后的类

在C++中,char仍然是一个primitive type(原始类型),而string已经经过封装,成为了一个class(类)
用到它时,我们需要 #include <string>,它是C++ Standard Library (C++标准库)的一部分

string这个类包括很多成员函数,比如push_back(), insert(), append()等,
详情见:
http://www.cplusplus.com/reference/string/string/
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
guanghui513
2011-12-29 · TA获得超过251个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:137万
展开全部
一个是类类型,一个是基本的数据类型,string这个类封装了很多C语言对char的一些系统的API操作。
追问
可不可以再详细一点。
追答
还是百度下吧,基本都是不同点,没有相同点。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
C加语言初学者
2011-12-29 · TA获得超过278个赞
知道答主
回答量:219
采纳率:0%
帮助的人:204万
展开全部
char a,a就是一个字符。
string a,a就是字符串。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-04-07
展开全部
1、char是字符类型
2、string是字符串类型
虽然一字之差,但其本质是很大的。
1. char属于基础类型(C++),在C#中它属于值类型(Value Type)。char类型的长度是固定的,C++中它可能是1个字节,或者2个字节(取决于是否为Unicode Char),而在C#中,它永远是2个字节。
2. string是一个模板类型,也就是一个class(C++)。在C#中它属于引用类型(Reference Type)。string的长度是无法明确取得的。也就是无法通过sizeof来取得,因为它不是一个基础类型,它本身并不固定长度,而取决于内部包含的 字符。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式