C语言小问题-不可小看
2005-12-15 23:31
281 查看
C语言小问题-不可小看
以下四段小程序,您可以试一试写出程序运行的结果,看能对几道题.![](http://blog.csdn.net/fckeditor/editor/images/smiley/msn/thumbs_up.gif)
,硬件条件: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语言训练题:关于张三李四王五说谎的问题(此处用javascript实现)
- C语言typedef与复杂函数声明问题的深入解析
- C语言链表在笔试面试中常考问题总结
- C语言内存分配及堆栈问题总结
- C语言字符串、指针和内存问题总结
- c语言解决杨辉三角问题
- C语言解决逻辑说谎问题
- C语言常见问题汇总
- 山东理工大学ACM平台题答案关于C语言 1196 排序问题
- C语言中指针占据内存空间问题
- C语言杂散问题
- C语言的BSS段问题
- C语言中的熄灯问题extended lights out(枚举)POJ1222//乱用函数返回值会遭报应QAQ
- [置顶] C语言复制文件的两种简单的方法【从根本解决问题】
- 解决内存不可read和written的问题
- C语言嵌套注释问题
- 关于C语言数组的定义问题
- 关于C语言BSS段问题以及变量定义的解答
- C语言指针安全及指针使用问题
- 答C语言初学者——有些问题可以放一放