200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 字符串结束符'\0' -何时自动加- 字符串定义方法

字符串结束符'\0' -何时自动加- 字符串定义方法

时间:2023-01-04 14:55:31

相关推荐

字符串结束符'\0' -何时自动加- 字符串定义方法

转载▼

字符串定义方法

有两种方法:

1)用字符数组;

2)用字符指针;

对应两种定义方法,有不同的初始化以及赋值方法

对字符数组,有以下几种定义方法:

1)char str[]="12345";

或给字符串加上大括号:char str[]={"12345"};

这种方法定义时,系统会自动在字符串的末尾加上字符串结束符,即 ‘\0’,

2)char str[10]={'1','2','3','4','5'};

这种方法定义时,系统会自动从未初始化的元素开始,将之后的元素赋为\0,如上面的数组str中的元素实际上是:'1','2','3','4','5','\0','\0','\0','\0','\0'

3)char str[]={'1','2','3','4','5'};

这种方法定义时,系统不会自动在字符串的末尾加上字符串结束符;

此时用sizeof()函数可以正确求出其所占的内存大小;但用strlen()函数不能正确求出其长度,因为strlen是通过\0判断字符串结束的。

所以,采用该方法定义时,一般人为地加上\0,即char str[]={'1','2','3','4','5', '\0'};

易错情况:

1、char a[10]; a[10]="hello";//一个字符怎么能容纳一个字符串?况且a[10]也是不存在的!

2、char a[10]; a="hello";//这种情况容易出现,a虽然是指针,但是它已经指向在堆栈中分配的10个字符空间,现在这个情况a又指向数据区中的hello常量,这里的指针a出现混乱,不允许!

还有:不能使用关系运算符“==”来比较两个字符串,只能用strcmp() 函数来处理。

补充:

无论是静态,局部还是全局数组只有在定义时才能初始话,否则必须通过其它方法,比如循环操作实现。

任何

int a[3];

static int b[3];

a[3] = {1, 2, 3};

b[3] = {1, 2, 3};

没有在定义时初始化都是错误的!

用字符指针定义时:

1)只能采用字符串的方式初始化:char *str3="12345";

注意:字符指针可以用字符串常量初始化和赋值;

即:char *str3;str3="12345";也是可以的

此时也可以用str3[4]的形式访问其中的元素,如cout<< str3[4];就会输出str指向的字符串的第四个元素。

该方法也是自动加上了字符串结束符的。

例程:

运行结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。