標籤:空間 複製 char const 崩潰 檔案組 不同 bsp 方式
C語言經典面試題:
1.可以做switch()的參數類型是:
答:只能是int和char型。
2.寫出float X與零值比較的if語句
答:if(x>-0.000001&x<0.000001)
3.C語言中將一個字元轉換成整數的函數是哪個?寫出這個函數的原型
答:函數:atol()
功能:把字串轉換成長整型
原型:long atol(const char *nptr)
樣本:
#include<stdio.h>
int main()
{
long lNum=0;
char *str="12345";
lNum=atol(str);
printf("String=%s integer=%d\n",str,lNum);
return 0;
}
4.unsigned char *p1=(unsigned char *)0x801000;
unsigned long *p2=(unsigned long *)0x810000;
p1+5=?,p2+5=?
答:p1+5=0x801005,p2+5=0x810014;
5.求值:int aNum=5,bNum=0;
bNum=(aNum++)(aNum++);
aNum=?,bNum=?
答:aNum=7,bNum=25
6 一16位整數1101010110110111,每四位為一個整數,寫函數求值
答:char sumFunc(unsigned short num)
{
char ch=0;
int iCount=4;
do{
c+=n&15;
n>>4;
}(while--i);
return 0;
}
7.編程實現兩個字串s和t,把t字串拼接到s字串尾,s字串有足夠的空間存放t字串
void strConnect(char *s,char *t,int n)
{
char *p=s;
char *q=t;
if(q==NULL)
return;
while(*p!=‘\0‘)
p++;
while(*q!=‘\0‘)
{
*p=*q;
p++;
q++;
}
*p=‘\0‘;
}
void main()
{
char cArray1[10]="abcde";
char cArray2[3]="xyz";
strConnect(cArray1,cArray2,3);
printf("%s",cArray1);
}
8.static全域變數與普通全域變數的區別,static局部變數與普通局部變數的區別,static函數與普通函數的區別。
答:1.非靜態全域變數的範圍是整個來源程式,當一個來源程式由多個源檔案組成時,非靜態全域變數在各個源檔案中都是有效,而靜態全域變數(只初始化一次)限制了其範圍,只在定義該變數的源檔案內有效,同一來源程式的其它源檔案都不能使用它。
2.static局部變數(只初始化一次)儲存在靜態區,普通局部變數儲存在棧中,儲存方式不同。
3.static函數在記憶體中只有一份,普通函數在每個被調用中都維持一份拷貝。
9.char a;
char *str=&a;
strcpy(str,"hello");
問這段代碼有什麼問題?
答:沒有為str分配記憶體空間,將會發生異常,將一個字串複製進一個字元變數指標所指指標,雖然可以正確輸出結果,但因為越界進行內在讀寫導致程式崩潰。
C語言面試題