您的位置:首页 > 编程语言 > C语言/C++

C语言小问题-不可小看

2005-12-15 23:31 281 查看

C语言小问题-不可小看

    以下四段小程序,您可以试一试写出程序运行的结果,看能对几道题.

,硬件条件:X86 32CPU

/*
//No.1
#include<stdio.h>
#include<string.h>
void main(void)
{
     int   i =0;
     char  cb[20] ;
  
    for( i=0; i<20; i++ )
    {
          cb[i] = 0;
    }
    printf("%d,%d/n", strlen(cb), sizeof(cb));
    return;
}

//No.2
void main(void)
{
     int   i =0;
     char  cb[20] ;
  
    for( i=0; i<20; i++ )
    {
          cb[i] = '0';
    }
    printf("%d,%d/n", strlen(cb), sizeof(cb));
    return;
}

//No.3
void main(void)
{
     int   i =0;
     char  cb[20] = {0,0,0,0,0,
                     0,0,0,0,0,
                     0,0,0,0,0,
                     0,0,0,0,0};  
    for( i=0; i<10; i++ )
    {
         cb[i] = '0';
    }
    printf("%d,%d/n", strlen(cb), sizeof(cb));
    return;
}

//No.4
void main(void)
{
     int   i =0;
     char  cb[20] = {0,0,0,0,0,
                     0,0,0,0,0,
                     0,0,0,0,0,
                     0,0,0,0,0};
  
    for( i=0; i<20; i++ )
    {
 cb[i] = '0';
    }
    printf("%d,%d/n", strlen(cb), sizeof(cb));
    return;
}

题目的结果如下:

No.1:0,20

No.2:不确定,20

No.3:10,20

No.4:21,20

特别是第四个,主要是变量i先压栈,然后数组cb才压栈,经过20次给数组元素赋值后,i其实只有一个字节非零(0x14),其他三个字节都是零,因此strlen(cb)=20+1(i的非零字节)=21

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  语言 c x86