引语:用字符串常量给字符数组赋值过程分析,涉及到数据在内存的分配情况,做一个分析!
一、测试案例,假设在某一个函数内部
测试代码段:
- char a[] = "abcd12";
- printf("len = %d\n",strlen(a));
- int len = 0;
- int i = 0;
- while(1)
- {
- if(a[i] != '\0')
- {
- len++;
- i++;
- }
- else if(a[i] == '\0')
- {
- len++;
- printf("array len = %d\n",len);
- break;
- }
- }
运行效果:
-
[root@localhost printTotxt]# ./rondom_create_score
- len = 6
- array len = 7
二、案例分析
图 字符串给字符数组赋值过程
1、字符串给字符数组的长度问题:
从案例代码可以看出,字符数组的长度是字符串+’\0’结束符;
而使用strlen(str),取得的是净字符串的长度,不包括’\0’。
2、字符串常量给字符数组赋值:
从上图,给数组a[]赋值时,是从文字常量区拷贝一个”abcd12”的副本给a[],然后系统自动加上’\0’结束符。
附:strlen的功能实质
strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值。