【龙旗控股】
1、Windows NT下的32位机运行环境下:
char str[] = “Welcome to 51_CC++”;
int Array[] = {1,2,3,4,5,6,7,8,9};
char *p = str;
int n;
int func( int a[] )
请计算:strlen(str), sizeof(str), sizeof(Array), sizeof(p), sizeof(n), 如果函数func参数传递数组Array,那么sizeof(a)呢?
18 19 36 4 4 4
2、请观察下列程序运行时是否会出现问题,若有,请指出问题,若不存在问题,请指出程序循环的次数
#define MAX_SIZE 255
void main()
{
unsigned char buff[MAX_SIZE +1];
unsigned char i;
for(i=0; i <= MAX_SIZE; i++) //死循环,unsigned char 0--255,for()中循环条件永远为真
{
buff[i] = i;
}
}
3、添加下面粗斜体部分代码的初衷是为了给gui_show_image这句代码的执行加上限制条件,请问这样修改有没有什么隐患,若有,该如何修改?
...................
gui_push_clip();
#ifdef AAA
if (show_status == MMI_TRUE)
#endif
#ifdef BBB
gui_show_image(x , y , image_id);
#endif
gui_pop_clip();
update_dt_display();
...................
//这段程序如果定义了AAA,也定义了BBB完全能够满足提议,给函数加上了限制条件,但若只定义了AAA,没有定义BBB程序也会执行,与一开始的想法就不相符了
4、请问下面程序运行后会出现什么问题,该如何修改,另外,从培养良好的编程规范角度看,哪些地方需要修改?
- void GetMemory(char *p)
{
p = (char*)malloc(57);
}
Void main()
{
char *str = NULL;
GetMemory(str);
strcpy(str,”51 C++”);
printf(str);
}
//传参数是值传递,p是临时空间,不会改变str指向,1.不能申请空间。2.会发生内存泄漏
2.char* GetMemory(void)
{
char *p=(char *)malloc(20);
char p[] = “51 C++”;
return p;
}
Void main()
{
char *str = NULL;
str = GetMemory();
printf(str);
}
//p[]是临时空间,出了这个函数空间被释放,应改为按 static char p[] = “51 C++”;
3.void GetMemory(char **p)
{
*p = (char *)malloc(57);
}
void main()
{
char *str = NULL;
GetMemory(&str);
strcpy(str,”51 C++”);
printf(str);
}
//最后加上free(str);
4.void main()
{
char *str = (char *)malloc(57);
strcpy(str,”51CC”);
free(str);
if(str != NULL)
{
strcpy(str,”C++”);
printf(str);
}
}
//free(str);str变为野指针,指向随机,if(str != NULL)不能作为判定条件