1.用malloc或farmalloc動態分配記憶體時,如
char *buffer;
buffer=(char *)malloc(300);
因為並不是在所有的情況下,都會分配成功
所以應加 if(buffer==null)
2.char far *buffer;
buffer=(char far *)farmalloc(size);
當size的值大於64k時,很可能不會分配成功,
但是不會返回null,很容易出錯。
因此最好size的值最好不要大於64k
3.char 的取值範圍為 0-127
unsigned char 的取值範圍為0-255
新手常常在使用char時,出錯,比如說,
在256色的螢幕模式下,顏色索引值為0-255,
而很多新手用 char color,這樣會出錯。
4.程式設計時常會對鍵盤進行處理
key=bioskey(1);
用bioskey(1)時,程式從緩衝區取乙個鍵,但是不
會把這個鍵從緩衝區移走,因此key的值將永遠保持不變
5.用if(bioskey(1)!=0) key=bioskey(0);
這樣按鍵時,會從緩衝區移走乙個鍵。
但是當不按鍵時,key的值將保持不變,直到按下一鍵為止
因此應加 else key=0;
6.使用textcolor(int newcolor);
和textbackground(int newcolor);
這兩個函式來改變字元顏色和背景色時,
用stdio.h中的printf,puts等向螢幕輸出的函式是,並不能
按textcolor(int),textbackground(int)這兩個函式所要求的顏色來顯示。
用該用conio.h中的cprintf,cputs等函式
7.printf("/n");游標會在螢幕上換行並移動到第一列。
但cprintf("/n");不會,printf是標準輸出函式,與dos相關
dos會自動把'/n'處理成'/n'和'/r',而cprintf是控制台級函式,不會這樣
因此應該用cprintf("/n/r");
8.float a=1.9;
if(a==1.9) printf("ok");
執行時卻不會顯示ok;
不要用float型數字進行關係運算中的等於運算
改為double雙精度型即可解決問題.
9.在tc2.0中
main()
這樣編譯時不會出錯
但是在有些c語言版本中,系統會自動當作
int main()
而顯示"..should return a value "
10.float a;
a=1/2;
printf("%f",a);
執行的結果是0.000000,而不是0.500000.
因為/號兩邊的數字是1和2,系統會當作整型處理,因此出
現這種情況,解決辦法是改為 a=1.0/2 或 a=1/2.0 或 1.0/2.0
11.乙個函式
char *buf()
因為系統在呼叫完函式時,會自動釋放為str 開闢的空間,
因此 return data無意義
12.對於findfirst(char *name,struct ffblk,int attrib);
findnext(struct ffblk);
當尋找目錄時,用findfirst("*.*",&ffblk,fa_direc);
雖然所找檔案的屬性為目錄,但是會將當前目錄下的所有檔案找出來
用findfirst("*.",&ffbli,fa_direc)時,找出來的是目錄以及沒有擴
展名的檔案。
13.看下面乙個函式
/*640x480x256*/
void plot(int x,int y,unsigned char color)
看似沒有錯誤,但是對於offest=(y-1)*640+x-1這句,
雖然offest是長整型,但是y是短整型,在計算(y-1)*640時,系統
會按短整型處理,當y的值取110以上時,(y-1)*640的值顯然會超出
短整型數字的取值範圍,從而產生錯誤,因此應改為
offest=(long int)(y-1)*640+x-1;
14.對於乙個陣列 int data[5][4];
data表示data[0][0]的位址
data[2]表示data[2][0]的位址
因此有人認為data[4][2]的位址可表示為
(1).data+4*4+2;
(2).data[4]+2;
其中(2)是正確的,而(1)卻是錯誤的.
因為data的基型別是8個位元組的,
data+4表示的就是data[4][0]的位址
data+1表示的就是data[1][0]的位址
15.許多人認為轉義字元'/64'中的64是十進位制數,
但實際上這個64是八進位制數,這個八進位制數前面可以加0也可不
加0,當然轉義字元/後面也可以用十六進製制數,但要
用'/x..'或'/x..'的形式,如'/x14'。
16.看下面這個程式
#include
void display(int data,int num)
void main()
;display(da,10);
}一般認為當程式裡呼叫這個函式時,系統會為形參data開闢乙個
10個整型數字的儲存空間,實際上,這個函式只為data開闢乙個整型指標型別的空間,
使用指標指向data的首位址,因此在display(int data,int num)這個函式中,
若使用賦值語句對陣列data的某項賦值,如data[0]=2,會使主程式中的陣列da的值改變.
17.void main()
}在編譯時,會出現警告。
在tc2.0中,若改為index<=255,編譯會通過,但是執行程式時
卻會陷入死迴圈,大家不禁會產生疑問,unsigned char型別資料的
取值範圍為0-255,為什麼上述程式會出現錯誤呢。
讓我們先看下面乙個程式:
void main()
printf("%d",i);
}執行結果為10,當i=9的迴圈完成後,i自加1,使得i=10,這時不符合
i<10,才跳出迴圈,因此執行結果為10;
同理,若改為i<=10;則執行結果為11。
通過這個程式,應該能明白為什麼前乙個程式會出錯了。
c常見錯誤
11.error c2017 illegal escape sequence 中文對照 轉義字元非法 分析 一般是轉義字元位於 或 之外,例如 char error n 12.error c2018 unknown character 0xhh 中文對照 未知的字元0xhh 分析 一般是輸入了中文標...
C語言 常見錯誤
1.忘記定義變數。2.輸入輸出的資料的型別與所用格式說明符不一致。3.未注意 型資料的數值範圍。4.在輸入語句scanf中忘記使用變數的位址符。5.輸入資料的形式與要求不符。6.誤把 作為 等於 運算子。7.語句後面漏分號。8.在不該加分號的地方加了分號。9.對應該有花括號的復合語句,忘記加花括號。...
C語言 常見錯誤
1 char p 注意p中包含字串結束符 0 2 strlen函式沒有包含字串末尾的 0 3 如果函式的引數是乙個指標,不要指望用該指標去申請動態記憶體 4 createnode binnode tree,char p 訪問tree.data錯誤 原來問題出在c編譯器原理上 編譯器總是要為函式的每個...