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