什么是C-风格字符串,除了c-风格的字符串,还是什么风格的呢?

wycfgq 2009-11-07 10:13:53
什么是C-风格字符串,除了c-风格的字符串,还是什么风格的呢?
总看到书上这样讲,我不明白,c-风格的含义是什么?
难道还有不是c风格的字符串吗?
那又是什么风格呢?
...全文
954 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
huolianglee 2011-08-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jackyjkchen 的回复:]
string str = "123";就是c++的风格;

char *str = "123";就是c风格
[/Quote]
“123”也是以0结尾的c风格字符串。
adobe_fch 2010-07-13
  • 打赏
  • 举报
回复
一楼正解
jdk_mo 2009-11-08
  • 打赏
  • 举报
回复
很热闹啊
mstlq 2009-11-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 supermegaboy 的回复:]
c风格的字符串就是以'\0'结尾的多字节字符序列
[/Quote]

[Quote=引用 19 楼 灰太狼大王 的回复:]
还有接近灭绝的dos字符串,以$为终止符~~~
dephi字符串,没有终止符,但在字符串头部定义了一个字节,指示字符串的长度~~
[/Quote]

up^_^
机智的呆呆 2009-11-08
  • 打赏
  • 举报
回复
还有接近灭绝的dos字符串,以$为终止符~~~
dephi字符串,没有终止符,但在字符串头部定义了一个字节,指示字符串的长度~~
ahao 2009-11-08
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 stjay 的回复:]
stl::string和MFC的CString所表示的字符串没有'\0'结尾的,
[/Quote]

具体实现上,string是可以有0结尾的,为了兼容C
ahao 2009-11-08
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 slowgrace 的回复:]
引用楼主 wycfgq 的回复:
什么是C-风格字符串,除了c-风格的字符串,还是什么风格的呢?
总看到书上这样讲,我不明白,c-风格的含义是什么?
难道还有不是c风格的字符串吗?
那又是什么风格呢?


C字符串的最显著特点就是以'\0'表示字符串终结,也因此C字符串里无法包含'\0'。比如你如果让一个字符串等于“abc\0def”,C会把这个字符串截断,只读到“abc”为止,因为它认为'\0'表示字符串的终止。

非c字符串,比如VB里用的BSTR字符串就不是这样的。当你在VB里声明了一个String型的变量,比如:Dim str1 As String。这个Str1本身其实是一个指针,指向的是实际字符串的缓冲区开始地址,这个开始地址前面4字节里存放的是这个缓冲区的长度,单位为字节。由于有长度前缀,所以可以包含'\0'在内的字符串,因为它并不需要用'\0'来判断字符串的结束。
[/Quote]

赞!不能包含0才是c串的本质啊
slowgrace 2009-11-08
  • 打赏
  • 举报
回复
总的来说,因为字符串不是一种基本的数据类型,所以在各种语言中定义的方式有较大差别,因此才有楼主所引的文字里的“C风格字符串”这种说法的出现。

楼上的回复里,我觉得17楼朋友举的各种例子也是有助于你理解这个问题,可以看看。
slowgrace 2009-11-08
  • 打赏
  • 举报
回复
Delphi中的字符串则更多,有:ShortString、AnsiString (就是兼容BCB 的AnsiString 的那种)以及WideString (用来支持Unicode 的,其他的和AnsiString 是完全一样的)。

它们也有各自的定义,可以看这篇文章:http://www.winu.cn/space-14160-do-blog-id-10757.html
slowgrace 2009-11-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 wycfgq 的回复:]
什么是C-风格字符串,除了c-风格的字符串,还是什么风格的呢?
总看到书上这样讲,我不明白,c-风格的含义是什么?
难道还有不是c风格的字符串吗?
那又是什么风格呢?
[/Quote]

C字符串的最显著特点就是以'\0'表示字符串终结,也因此C字符串里无法包含'\0'。比如你如果让一个字符串等于“abc\0def”,C会把这个字符串截断,只读到“abc”为止,因为它认为'\0'表示字符串的终止。

非c字符串,比如VB里用的BSTR字符串就不是这样的。当你在VB里声明了一个String型的变量,比如:Dim str1 As String。这个Str1本身其实是一个指针,指向的是实际字符串的缓冲区开始地址,这个开始地址前面4字节里存放的是这个缓冲区的长度,单位为字节。由于有长度前缀,所以可以包含'\0'在内的字符串,因为它并不需要用'\0'来判断字符串的结束。
bestwaqh 2009-11-08
  • 打赏
  • 举报
回复
学习了。。。
higoogoo 2009-11-08
  • 打赏
  • 举报
回复
学习了
wangguangjia85 2009-11-08
  • 打赏
  • 举报
回复
c风格的字符串是以数组的形式存储的
dhsjfl 2009-11-08
  • 打赏
  • 举报
回复
学习!
dbx12358 2009-11-08
  • 打赏
  • 举报
回复
有点深。不太明白了
x396448534 2009-11-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 winingsky 的回复:]
string str=" ";//C++风格
char* s=" ";  //C风格
[/Quote]

学习了
zhaiershuaixu 2009-11-08
  • 打赏
  • 举报
回复
xuexi
beikejiebaimatan 2009-11-08
  • 打赏
  • 举报
回复
了解了
hhpltby2007 2009-11-08
  • 打赏
  • 举报
回复
Learning more ...
yanziszj 2009-11-08
  • 打赏
  • 举报
回复
学习啊!
加载更多回复(18)

64,659

社区成员

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

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