现在的位置: 首页 > 综合 > 正文

c语言中字符串与字符数组

2013年04月18日 ⁄ 综合 ⁄ 共 1026字 ⁄ 字号 评论关闭

当初学c时就感觉字符串是个很神奇的东西,说数组不是数组,说变量不变量的。

1. 字符数组

字符数组和一般的整形数组没区别,只是每个变量是char而已,占1byte。

声明:char a[ ];

初始化:a[ ]={'s','t','r','i','n','g',' ','i','s',' ','a',' ','c','o','n','s','t','a','n','t','\0'};

或者a[ ]="string is a constant";

或者a[ ]={"string is a constant"};

在第一种初始化中可以去掉最后的'\0',对字符数组的使用没有影响。

后两种初始化中,在't'后面的内存中也会默认填入'\0';

在最后加入'\0'的字符数组是非常像字符串的,只有在一些计算占用内存大小的函数上有所区别,记'\0'和不记'\0'的区别。


2. 字符串

字符串是一种变量,这个变量是一段连续的内存,变量的值是手段内存的地址。

初始化 char *a="string is a constant";

在字符串内存的最后也会自动加上一个'\0'.

也可以按照数组的方法来访问字符串的中单个值,a[n]。但是不能对其进行修改,即字符串是不可变的。

在输出字符串时,采用%s,从内存首地址1byte1byte的输出字符,直到遇到'\0','\0'是不输出的。


3.有意思的地方

可以使用输出字符串的方法printf("%s",a)输出字符数组,但不能使用初始化字符串的方法对字符数组进行初始化,char a[10];a="hello";是错误的。

但是呢,可以像输入字符串那样来初始化字符数组,例如char a[10];scanf("%s",a);是可以的但输入的字符串长度不能大于10,否则会引起一些不知名的错误,而且在采用这种方法初始化字符数组时,在最后也会在后一个内存中加入'\0'.


4 注意的地方

对于一个字符数组,初始化后,其大小是不变的,不管其内存结束后有没有'\0',也不管其间有没有'\0',对于sizeof。只是在按字符串输出时,到'\0'截止。

采用char *b=“”;初始化字符串时,b只是一个指针,只有采用和字符串相关的函数时,才把由b开始的由'\0'结束的一段内存中的字符值当做字符串。例如sizeof(b)是指指针的大小4byte,而strlen(b)才是该字符串的长度。


附上一个关于字符串是字符数组大小的介绍

http://c.chinaitlab.com/basic/892343.html

抱歉!评论已关闭.