#include<stdio.h>
#include< string.h> // strlen()的头文件,可以省去
int main( void)
{
char a[ 1000];
int i;
int len= 0;
for (i= 0;i< 1000;i++) {
a[i]=- 1-i;
}
printf( " %d ",strlen(a));
// strlen(a)是从a的首地址开始往后查找,直到找到'\0',因为'\0'是字符串结束的标志,又由于char只占一个字节,a[127]=-128,a[128]=127,...,a[255]=0,
printf( " \n\na=\n ");
for (i= 0;i< 1000;i++) {
if (a[i]== ' \0 ') {
printf( " %d ",a[i]);
break;
}
else {
printf( " %d, ",a[i]);
len++;
}
}
printf( " \n\nlen=%d\n ",len);
getchar();
return 0;
}
#include< string.h> // strlen()的头文件,可以省去
int main( void)
{
char a[ 1000];
int i;
int len= 0;
for (i= 0;i< 1000;i++) {
a[i]=- 1-i;
}
printf( " %d ",strlen(a));
// strlen(a)是从a的首地址开始往后查找,直到找到'\0',因为'\0'是字符串结束的标志,又由于char只占一个字节,a[127]=-128,a[128]=127,...,a[255]=0,
printf( " \n\na=\n ");
for (i= 0;i< 1000;i++) {
if (a[i]== ' \0 ') {
printf( " %d ",a[i]);
break;
}
else {
printf( " %d, ",a[i]);
len++;
}
}
printf( " \n\nlen=%d\n ",len);
getchar();
return 0;
}
主要注意两个函数strlen()和sizeof():
- strlen(): char a[]; strlen(a)表示从a数组的首地址开始一直到遇见'\0'为止,所有字符的个数,像在这里a[127]=-128,a[128]=127,...,a[255]=0,
而'\0'是字符串结束的标志,'\0'对应十进制0,也就是NULL,所以该数组共有255个字符,最后一个为NULL,strlen()函数不把NULL记录在内,因此返回值为255。 - sizeof()返回的是数字类型所占的字节数,如:sizeof(int)=4,sizeof(char)=1.....
- char 数组的溢出:由于int占4个字节,而char 只有1个字节,故整数类型在强制转换为字符类型的过程中就会存在溢出,一个字节能表示的整数范围为-128——127,用二进制表示就是10000000——011111111,所以-129 就是100000000-1=01111111(127),-1用11111111表示,所以就可以得到a[255]=0。