c练习题【龙旗控股】

【龙旗控股】

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、请问下面程序运行后会出现什么问题,该如何修改,另外,从培养良好的编程规范角度看,哪些地方需要修改?

  1. 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)不能作为判定条件

 

猜你喜欢

转载自blog.csdn.net/qq_40359892/article/details/81289908