串的顺序储存结构中到底有没'\0'啊???

liyunxin 2008-03-17 12:48:18
如:
typedef struct
{
char ch[MaxSize]; /*存放串字符*/
int len; /*存放串的实际长度*/
} SqString; /*顺序串类型*/


void Assign(SqString &s,char t[]) /*串赋值运算*/
{
int i=0;
while (t[i]!='\0')
{
s.ch[i]=t[i]; //如果t[]="ab"的话,在赋值的时候,并没把'\0'赋给串中,所以串中到底有没'\0'????
i++;
}
s.len=i;
}
...全文
182 12 打赏 收藏 举报
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sugrong001 2008-03-18
  • 打赏
  • 举报
回复
C++字符串中的\0都是系统自动加上去的
j_willl 2008-03-18
  • 打赏
  • 举报
回复
lz的循环当t[i]是/0时候就结束了 下面的赋值语句都没有执行 s.ch中当然没有/0了
kojie_chen 2008-03-17
  • 打赏
  • 举报
回复
有,是系统自动加入进去的,做一下遍历就能看出来
while (t[i]!='\0')
{
printf("%c",s.ch[i]);
i++;
}
bicener 2008-03-17
  • 打赏
  • 举报
回复
从楼主的代码看,根本没有加上'\0',需手动再加上
bjjfirst 2008-03-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Chiyer 的回复:]
C/C++ code

char ch[] = "ab";编译器会自动帮你在最后加上 \0

char ch[] = {'a', 'b'};这种就不会自动加
[/Quote]

编译器对双引号中的字符串内容会自动加'\0',其实'\0'就是一个字符,它的值为0.
如果这样定义:char ch[2] = "ab",编译的时候是通不过的,因为"ab"已经是"ab\0"了。
char ch[] = "ab",这句相当于: char ch[3] = {'a','b','\0'};

对于char ch[] = {'a', 'b'};因为没有字符串,所以不会自动添加,
这句相当与:char ch[2] = {'a','b'};
tianjiao85 2008-03-17
  • 打赏
  • 举报
回复
字符串和字符数组的区别(部分):
前者一定以'\0'结尾,并且不计算入字符串长度值,
而字符数组就是每个数组元素的数据类型都是字符而已,不一定有'\0'。
greadking 2008-03-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Chiyer 的回复:]
C/C++ code

char ch[] = "ab";编译器会自动帮你在最后加上 \0

char ch[] = {'a', 'b'};这种就不会自动加
[/Quote]

paidfighting 2008-03-17
  • 打赏
  • 举报
回复
re,lz的情况是没有的
星羽 2008-03-17
  • 打赏
  • 举报
回复


char ch[] = "ab";编译器会自动帮你在最后加上 \0

char ch[] = {'a', 'b'};这种就不会自动加
abupie 2008-03-17
  • 打赏
  • 举报
回复
t[]本身是没有'\0'的.
使用t[]="ab"赋值的时候,系统默认"ab"其实是"ab\0"的, 所以, 赋值后,t[]会有'\0'.
magicrobot 2008-03-17
  • 打赏
  • 举报
回复
汗,系统是不会帮你加'\0'的,另外如果是这种方式赋值的话t[]="ab",那数组t中倒是带了'\0'.
按楼主的代码来看,如果是要将数据t中的值赋给数据s.ch,那循环执行完了后,应该还需要再手动加一次'\0'到数据中。
lzy340623339 2008-03-17
  • 打赏
  • 举报
回复
c格式的字符串最后是肯定有'/0'的,而且是编译器帮添加上去的
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-03-17 12:48
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下