Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12838971
  • 博文数量: 1293
  • 博客积分: 13501
  • 博客等级: 上将
  • 技术积分: 17974
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 18:11
文章分类

全部博文(1293)

文章存档

2019年(1)

2018年(1)

2016年(118)

2015年(257)

2014年(128)

2013年(222)

2012年(229)

2011年(337)

分类:

2012-10-31 19:20:33

引语:用字符串常量给字符数组赋值过程分析,涉及到数据在内存的分配情况,做一个分析!


一、测试案例,假设在某一个函数内部

测试代码段:


  1. char a[] = "abcd12";
  2.     printf("len = %d\n",strlen(a));
  3.     int len = 0;
  4.     int i = 0;
  5.     while(1)
  6.     {
  7.         if(a[i] != '\0')
  8.         {
  9.             len++;
  10.             i++;
  11.         }
  12.         else if(a[i] == '\0')
  13.         {
  14.             len++;
  15.             printf("array len = %d\n",len);
  16.             break;
  17.         }
  18.     }


运行效果:


  1. [root@localhost printTotxt]# ./rondom_create_score
  2. len = 6
  3. array len = 7

 

二、案例分析

image

图 字符串给字符数组赋值过程


1、字符串给字符数组的长度问题:

从案例代码可以看出,字符数组的长度是字符串+’\0’结束符;

而使用strlen(str),取得的是净字符串的长度,不包括’\0’。

2、字符串常量给字符数组赋值:

从上图,给数组a[]赋值时,是从文字常量区拷贝一个”abcd12”的副本给a[],然后系统自动加上’\0’结束符。

 

附:strlen的功能实质

strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值。

阅读(4580) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~