您的位置:首页 > 其它

C的字符串和字符数组之间的关系

2014-09-04 10:18 337 查看
字符数组初始化:

c++ primer有专门解释:字符数组有两种初始化方式:
1、以字符字面值初始化:char a[] = {'a','a','a','a','a'}; 不含null('\0')
2、以字符串字面值初始化:char a[] = "aaaaa" ;含null('\0')

int i,j=0;
char acStr[] ={'a','a','a','a','a'};//这个是字符数组,只含有5个字符

        char *pcStr = "aaaaa";//这个是字符串,含有6个字符,即5个a加一个结束符'\0'
for(i=0;i<sizeof(acStr);i++)
{
printf("%c",acStr[i]);
j++;
}
printf("%d\n",j);
j=0;
for(i=0;i<sizeof("aaaaa");i++)
{
printf("%c",pcStr[i]);
j++;
}
printf("%d\n",j);



可以看到字符数组初始化的末尾没有'\0',但是字符串初始化的末尾有'\0'

 char a[10]={'J','u','s','f','o','r'};

申明的字符数组的长度是10,但是初始化的只有a[0-5],后面的a[6-9]没有进行赋值 ,这种情况下a[6-9]默认是'\0'。

在C里面没有单独的字符串,字符串通常都是作为字符数组来处理的,C里面也没有头文件string.h,使用这个头文件只限于C++,可能会有人说在C代码里面见过strlen来计算字符串长度的,其实strlen()并不是包含在string.h这个头文件中。strlen()函数是计算字符串里面的字符的个数,将'\0'作为结束的标志,  但是'\0'是不计算在内的。

但是注意一点:char c[10]={"1111111111"};那么strlen(c)的结果是未知的,直到他遇到一个null为止,因为c[10]里面没有'\0'结束标志。

char acStr[] ={'a','a','a','a','a','a','a'};//这个是字符数组,只含有5个字符

  char *pcStr = "aaaaaaaaaa";//这个是字符串,含有6个字符,即5个a加一个结束符'\0'

pcStr=acStr;

    printf("%d\n",strlen(acStr));
 printf("%d\n",strlen(pcStr));
 printf("%d\n",sizeof (acStr));
 printf("%d\n",sizeof (pcStr));
 printf("%x\n",pcStr);
  printf("%x\n",acStr);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c strlen sizeof