用字符串常量给字符数组赋值过程分析

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


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

测试代码段:


  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

 

二、案例分析

用字符串常量给字符数组赋值过程分析

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


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

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

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

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

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

 

附:strlen的功能实质

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

上一篇:类似智能购票的demo--进入页面后默认焦点在第一个输入框,输入内容、回车、right时焦点自动跳到下一个,当跳到select时,下拉选项自动弹出,并且可以按上下键选择,选择完成后再跳到下一个。


下一篇:跨交换机相同vlan内的通信(trunk模式)