char 溢出

#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;
}

主要注意两个函数strlen()和sizeof():

  1. 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。
  2. sizeof()返回的是数字类型所占的字节数,如:sizeof(int)=4,sizeof(char)=1.....
  3. char 数组的溢出:由于int占4个字节,而char 只有1个字节,故整数类型在强制转换为字符类型的过程中就会存在溢出,一个字节能表示的整数范围为-128——127,用二进制表示就是10000000——011111111,所以-129 就是100000000-1=01111111(127),-1用11111111表示,所以就可以得到a[255]=0。

转载于:https://www.cnblogs.com/xuechao/archive/2011/10/23/2221989.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值