c++字节数组的长度_字符数组

在 C 语言中,字符串应用的非常广泛,但是却没有字符串类型。为了解决这个问题,C语言使用字符数组来存储字符串。

1. 字符串与字符串结束标志.

在 C 语言中没有专门定义字符串类型,通常使用字符数组来存储字符串。由于字符串也采用字符数组进行存储,为了区分普通字符数组和字符串,C 语言规定以字符’\0’作为字符串结束标志。例如:

char c[ ]={‘h’,’e’,’l’,’l’,’o’};

以上字符数组中没有’\0’表示是普通的字符数组。

char c[ ]={'h','e','l','l','o','\0'};

以上字符数组以字符’\0’结束表示是字符串。

分析程序中内存的分布,思考为什么需要'\0'作为结束标志。

除了以上初始化方式,也可以采用字符串对字符数组进行初始化,例如:

char c[ ]=“hello”;

使用字符串方式进行赋值时,系统会自动在字符串末尾添加’\0’,“hello”在内存中实际存情况式如图所示:

      h      e       l      l      o      \0

通过对比可以发现,使用字符串初始化更加简洁、而且无需指定字符数组长度,系统会自动计算字符串长度并且添加’\0’。

2. ’\0’注意事项

在 C 语言中,采用’\0’作为字符串结束标志,当系统读取到’\0’时,认为字符串结束,’\0’之后的内容将不再读取。因此,通常将’\0’添加在字符串末尾,保证字符串完整输出。不过需要注意的是,’\0’其实可以添加在字符串任意位置上,例如:

char c[ ]={'h','\0','e','l','l','o','\0'};

char c[ ]={"h\0ello"};

在字符串中‘\0’可以省略单引号,直接写为\0。

下面通过例子了解一下’\0’的作用。

#includeint main(){  char chs1[ ]={'h','\0','e','l','l','o','\0'};  char chs2[ ]="h\0ello";  printf("%s\n",chs1);  printf("%s\n",chs2);  getchar();  return 0;}

运行结果如下图:

4cbc74136d447a3558be4387c526f4ce.png

以%s 格式分别输出字符串,可以看到只输出了”h”。这是因为当系统读取到’h’后面的’\0’时,就认为字符串结束了,后面的内容不再读取,因此只输出”h”。

像 printf 等函数处理字符串的时候通常都是“不见\0 不死心”,因此使用字符串的时候一定不要忘了结尾的\0。

3. sizeof

由于字符串底层采用字符数组进行存储,因此计算字符串长度,等价于计算字符串转化为字符数组后字符数组的长度,例如:

char c[ ]="hello";

上述代码,经过编译后,会转化为以下字符数组形式:

char c[ ]={'h','e','l','l','o','\0'};

前面讲过数组长度计算方式对于计算字符串长度同样适用,例如

int length=sizoef(c)/sizeof(c[0]);

下面通过例子来了解一下。

#includeint main(){  char c1[ ]={'h','e','l','l','o','\0'};  char c2[ ]="hello";  int length1=sizeof(c1)/sizeof(c1[0]);  int length2=sizeof(c2)/sizeof(c2[0]);  printf("%d\n",length1);  printf("%d\n",length2);  getchar();  return 0;}

运行结果如图所示:

fc2085e86ed7af61016ee405640fa56e.png

4. strlen

在 C 语言中,字符串有效长度指的是字符串中’\0’之前的字符个数,不包括’\0’。例如:

char c1[ ]={'h','e','l','l','o','\0'};

c1 字符串有效长度为 5,不包括最后的’\0’。

char c2[ ]={"hello"};

c2 字符串有效长度为 5,不包括系统自动添加的’\0’。

在实际开发中,为了快速计算字符串有效长度,可以使用 C 语言标准库提供的 strlen 函数。

函数原型:int strlen(char str[ ]);

头文件(解释什么是 include):#include

参数列表:str:被计算的字符串。

功能:计算字符串有效长度。

返回值:返回字符串有效长度。

#include#includeint main(){  char c1[ ]={'h','e','l','l','o','\0'};  char c2[ ]="hello";  int length1=strlen(c1);  int length2=strlen(c2);  printf("%d\n",length1);  printf("%d\n",length2);  getchar();  return 0;}

运行结果为:

32b8c3ba952992d4d5dc1e20080e1b1a.png

需要注意的是,strlen 函数内部只会计算字符串中’\0’之前的字符个数,’\0’及之后的字符将被忽略。

5. 中文字符串长度

在程序的默认设置中,1 个中文字符占 2 个字节。

char c[ ]=”你好”;

c是中文字符串,有效长度为 2,2 个中文字符占 4 个字节,再加上’\0’占 1 个字节,c在内存中一共占 5 个字节。

6. 字符串元素遍历

在 C 语言中,字符串本质上就是以’\0’结尾的字符数组。同理,字符数组也可以使用 for循环进行遍历。

由于字符’\0’是控制字符,无法在控制台中显示。但是为了让读者感受到字符串末尾确实有’\0’的存在,以下代码中,分别使用%d、%c 格式输出数组元素。

示例代码如下:

#includeint main(){  char c[ ]="hello";  int i;  int length=sizeof(c)/sizeof(c[0]); //计算字符串长度  for (i=0;i< length;i++)  {    printf("%c ",c[i]);    printf("%d\n",c[i]); //输出字符 ASCII 码   }  getchar();  return 0;}

运行结果为:

b1415a5d6e08c68c85c8f01461f814ee.png

7. char* 方式引用字符串

在 C 语言中,字符串存储的方式只有一种,采用字符数组格式进行存储。但是引用的方式却有两种,除了前面介绍的字符数组方式,还可以定义 char*类型的变量进行引用。例如:

char* string="hello";

以上代码表示,定义 char*类型变量 string,并使用字符串进行初始化。这涉及到后续讲的“指针”的问题。

#includeint main(){  char* string="hello";  printf("%s",string);  getchar();  return 0;}

运行结果为:

9cf403ac97abf8515ae617cf53da8112.png

【注意】意用 char*方式引用字符串的时候不能用 sizeof 算字符串的长度。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值