字符数组和字符串数组
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小时内删除。
发表评论