字符数组和字符串数组
demo
int _tmain(int argc, _TCHAR* argv[])
{
char a[5] = {1,2,3,4,5};  //字符数组
char b[5] = {1,2,3,4,'\0'};  //字符数组,也可以叫字符串数组;a[5]不可以叫字符串数组
char c[5] = "test";  //字符数组,也可以叫字符串数组,a[5]不可以叫字符串数组
int arry[5] = {10000,2147483647,2147483647,2147483647,2147483647};  //整型数组
getchar();
return0;
}
-
数组类型字符串转数组        a    0x00cffc70"烫烫烫烫烫蘆"char [5]
[0]    1''char
[1]    2''char
[2]    3''char
[3]    4''char
[4]    5''char
strlen(a)    18int
sizeof(a)    5    unsigned int
-        b    0x00cffc60""char [5]
[0]    1''char
[1]    2''char
[2]    3''char
[3]    4''char
[4]    0char
strlen(b)    4int
sizeof(b)    5    unsigned int
-        c    0x00cffc50"test"char [5]
[0]    116't'char
[1]    101'e'char
[2]    115's'char
[3]    116't'char
[4]    0char
strlen(c)    4int
sizeof(c)    5    unsigned int
-        arry    0x00cffc34int [5]
[0]    10000int
[1]    2147483647int
[2]    2147483647int
[3]    2147483647int
[4]    2147483647int
strlen(arry)    2int
sizeof(arry)    20    unsigned int
1.字符数组的数组长度不等于数组的元素个数
  从字符数组b,可以看到我们存放了5个字符,最后的⼀个字符是结束符,计算长度时并没有计算它。
2.对于字符数组。通常会以strlen来计算数组长度,或者计算数组元素个数,以sizeof计算数组内存⼤⼩。
  例如字符数组a,很明显看到,strlen⽆法计算出数组的长度;⽽通过sizeof计算,由于字符的特殊性,计算出的数组内存⼤⼩刚好等于数组长度。
  ⽽通过字符数组b,可以看到,strlen计算出数组的长度,sizeof计算出的内存⼤⼩⽐strlen多⼀个字节,即字符串的结束符(空字符)占据数组的内存空间。
3.字符数组c。通过字符串常量进⾏赋值,可以达到给字符数组b扶植表达式同样的效果。
4.对于整形数组。
1. 不能⽤strlen来计算数组元素个数,或者计算数组长度。strlen是⽤来计算字符串的。
2. sizeof⽤来计算数组占据的内存空间⼤⼩。
问题
  在“字符串数组 Debug 系统回收空间引起程序崩溃”随笔中提到,当结束函数调⽤时,Debug下,系统回收字符串数组空间,会引起程序崩溃(不中断,可以继续执⾏)。然⽽在这⾥我们的字符串数组a,在函数结束时并没有引起程序崩溃,同样在栈上,产⽣的结果不同。
-        a    0x009ff860"烫烫烫虓2 励?"char [5]
[0]    1''char
[1]    2''char
[2]    3''char
[3]    4''char
[4]    5''char
strlen(a)    19int
sizeof(a)    5    unsigned int
-        b    0x009ff850""char [5]
[0]    1''char
[1]    2''char
[2]    3''char
[3]    4''char
[4]    0char
strlen(b)    4int
sizeof(b)    5    unsigned int
-        c    0x009ff840"test"char [5]
[0]    116't'char
[1]    101'e'char
[2]    115's'char
[3]    116't'char
[4]    0char
strlen(c)    4int
sizeof(c)    5    unsigned int
-        arry    0x009ff824int [5]
[0]    10000int
[1]    2147483647int
[2]    2147483647int
[3]    2147483647int
[4]    2147483647int
strlen(arry)    2int
sizeof(arry)    20    unsigned int
sztest    CXX0017: 错误: 没有到符号“sztest”
strlen(sztest)    CXX0017: 错误: 没有到符号“sztest”
sizeof(sztest)    CXX0017: 错误: 没有到符号“sztest”    -        sztest    0x009ff740"005"char [3]
[0]    48'0'char
[1]    48'0'char
[2]    53'5'char
strlen(sztest)    3int
sizeof(sztest)    3    unsigned int
-        a    0x009ff860"烫烫烫虓2 励?"char [5]
[0]    1''char
[1]    2''char
[2]    3''char
[3]    4''char
[4]    5''char
strlen(a)    19int
sizeof(a)    5    unsigned int
-        b    0x009ff850""char [5]
[0]    1''char
[1]    2''char
[2]    3''char
[3]    4''char
[4]    0char
strlen(b)    4int
sizeof(b)    5    unsigned int
-        c    0x009ff840"test"char [5]
[0]    116't'char
[1]    101'e'char
[2]    115's'char
[3]    116't'char
[4]    0char
strlen(c)    4int
sizeof(c)    5    unsigned int
-
        arry    0x009ff824int [5]
[0]    10000int
[1]    2147483647int
[2]    2147483647int
[3]    2147483647int
[4]    2147483647int
strlen(arry)    2int
sizeof(arry)    20    unsigned int
-        sztest    0x009ff740"005"char [3]
[0]    48'0'char
[1]    48'0'char
[2]    53'5'char
strlen(sztest)    3int
sizeof(sztest)    3    unsigned int

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。