Chinaunix

标题: [求教]windows下编程时,char*都是\0结尾的吗,但是linux下好像就不同了吧? [打印本页]

作者: LIPPER    时间: 2008-09-22 21:27
标题: [求教]windows下编程时,char*都是\0结尾的吗,但是linux下好像就不同了吧?
windows下编程时,char*都是\0结尾的吗,但是linux下好像就不同了吧?
我见到的数据是这样的:
03 31 32 33 74 00
先是字符串的长度,然后是内容,结尾居然是74 00 ( t .)
是因为linux就这样存储字符,还是因为该应用是java开发的,java 的字符串类型是这么存放数据的吗?
作者: mik    时间: 2008-09-22 21:47
标题: 回复 #1 LIPPER 的帖子
c 的字符串编码是0结尾的。
delphi 有一种字符串类型不是0结尾的,规则是:前2/4个字节是字符串长度。具体类型忘了
作者: LIPPER    时间: 2008-09-22 21:53
数据肯定是java程序出的
作者: LIPPER    时间: 2008-09-22 21:56
就是觉得处理起来挺费力的,得专门编函数处理,如果知道根本原因的话可以找来专门的介绍看下吗?
作者: blizzard213    时间: 2008-09-22 22:15
原帖由 LIPPER 于 2008-9-22 21:27 发表
windows下编程时,char*都是\0结尾的吗,但是linux下好像就不同了吧?
我见到的数据是这样的:
03 31 32 33 74 00
先是字符串的长度,然后是内容,结尾居然是74 00 ( t .)
是因为linux就这样存储字符,还 ...

不管啥编程 只要是ansi c 都一样
作者: 想飞的蜗牛    时间: 2008-09-22 22:33
原帖由 blizzard213 于 2008-9-22 22:15 发表

不管啥编程 只要是ansi c 都一样

支持
作者: blueboy83    时间: 2008-09-23 11:21
orz
统一的c,cpp标准
作者: honey709    时间: 2008-09-23 20:03
原帖由 LIPPER 于 2008-9-22 21:27 发表
windows下编程时,char*都是\0结尾的吗,但是linux下好像就不同了吧?
我见到的数据是这样的:
03 31 32 33 74 00
先是字符串的长度,然后是内容,结尾居然是74 00 ( t .)
是因为linux就这样存储字符,还 ...

ansi c的标准里边有
作者: Godbach    时间: 2008-09-23 20:18
LZ要搞清楚一个概念,char *并不一定就用来表示字符串。也可以只代表有符号的char型数据。至于存什么样的数据,就看实际需求了。

不要一看到char *就把它想成字符串,然后考虑以什么结尾。
作者: 雨过白鹭洲    时间: 2008-09-23 21:10
原帖由 Godbach 于 2008-9-23 20:18 发表
LZ要搞清楚一个概念,char *并不一定就用来表示字符串。也可以只代表有符号的char型数据。至于存什么样的数据,就看实际需求了。

不要一看到char *就把它想成字符串,然后考虑以什么结尾。

对头,注意语义,'\0'只有对C字符串才有意义,比如strlen()之类的函数。

我指一段内存的话,管它存什么数据呢。。。
作者: Godbach    时间: 2008-09-24 10:03
是啊。只有当char *str = "hello,word"这样的场合,或者strcpy之类字符串操作的时候,要考虑其结尾字符。
作者: hysqwu    时间: 2008-09-27 15:03
请指导下关于寄存器Register的问题--急
作者: ddfqqy    时间: 2008-09-28 11:59
原帖由 雨过白鹭洲 于 2008-9-23 21:10 发表

对头,注意语义,'\0'只有对C字符串才有意义,比如strlen()之类的函数。

我指一段内存的话,管它存什么数据呢。。。

再补充一下,0是用来判断字符串是否结束的标志,如果你自己定义的字串,后面都忘记加0了,或者用来指向别的buffer,而这buffer是其他类型或者需要自己加0的,那就是你自己没注意了。只能保证“abc”之类的字串常理后面是有0的




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2