面试c语言考题,c语言面试最必考的十道试题,求职必看!!!
該樓層疑似違規(guī)已被系統(tǒng)折疊?隱藏此樓查看此樓
6、free()函數(shù)
問:下面的程序會在用戶輸入’freeze’的時候出問題,而’zebra’則不會,為什么?
#include int main(int argc, char *argv[]) {
char *ptr = (char*)malloc(10);
if(NULL == ptr)
{
printf("\n Malloc failed \n");
return -1;
}
else if(argc == 1)
{
printf("\n Usage \n");
}
else
{
memset(ptr, 0, 10);
strncpy(ptr, argv[1], 9);
while(*ptr != 'z')
{
if(*ptr == '')
break;
else
ptr++;
}
if(*ptr == 'z')
{
printf("\n String contains 'z'\n");
// Do some more processing }
free(ptr);
}
return 0; }
答:這里的問題在于,代碼會(通過增加“ptr”)修改while循環(huán)里“ptr”存儲的地址。當輸入“zebra”時,while循環(huán)會在執(zhí)行前被終止,因此傳給free()的變量就是傳給malloc()的地址。但在“freeze”時,“ptr”存儲的地址會在while循環(huán)里被修改,因此導致傳給free()的地址出錯,也就導致了seg-fault或者崩潰。
7、*和++操作
問:下面的操作會輸出什么?為什么?
#include int main(void) {
char *ptr = "Linux";
printf("\n [%c] \n",*ptr++);
printf("\n [%c] \n",*ptr);
return 0; }
答:輸出結(jié)果應該是這樣:
[L] [i]
因為“++”和“*”的優(yōu)先權一樣,所以“*ptr++”相當于“*(ptr++)”。即應該先執(zhí)行ptr++,然后才是*ptr,所以操作結(jié)果是“L”。第二個結(jié)果是“i”。
總結(jié)
以上是生活随笔為你收集整理的面试c语言考题,c语言面试最必考的十道试题,求职必看!!!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大连理工大学c语言第三次上机作业答案,大
- 下一篇: 某班学生有50人会c语言的有40人,《离