首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言常見錯誤大全:語法、邏輯、運行時 27 類錯誤分類解析

     編輯:關於C

分類總覽

編號錯誤類型典型代碼修正要點
0未定義變數x=3; printf("%d",x);先宣告 int x;
1格式化字串與引數不匹配int a=3; printf("%f",a);%d 對應 int,%f 對應 float/double
2int 溢位int n=89101; // 16-bit 環境用 long 或 int32_t
3scanf 缺 &scanf("%d", a);scanf("%d", &a);
4scanf 格式字元未按原樣輸入scanf("%d,%d", &a,&b); // 輸入 "1 2"輸入需含逗號,或改 "%d %d"
5= 與 == 混淆if (a = 0)比較用 ==,賦值用 =
6語句漏分號b = t (行尾)每句以 ; 結束
7不該加分號if (a>b); printf(...);控制語句後不加 ;
8複合語句缺大括號while(i<=100) sum+=i; i++;多句必加 { }
9括號不匹配while((c=getchar()!= '#')逐一對應 () [] {}
10大小寫敏感C = A + B; // 變數 c嚴格區分大小寫
11陣列下標用圓括號scanf("%d", &a(i));下標用 []
12陣列長度與下標混淆int a[10]; for(i=1;i<=10;i++) a[i]=0;下標 0~9,長度 10
13多維陣列宣告/存取錯誤int a[5,4]; a[1+2,2+2];int a[5][4]; a[1][2]
14誤以為陣列名可整體輸出printf("%d", a);逐元素列印或用迴圈
15字串陣列直接賦值char str[40]; str = "abc";strcpy(str, "abc");
16指標未初始化即使用char *p; scanf("%s", p);char buf[100]; scanf("%s", buf);
17switch 缺 break貫穿導致邏輯錯誤每 case 以 break 結束
18字元與字串常量混淆char c; c = "M";c = 'M';
19自增副作用順序printf("%d", *p++);區分 *p++ vs *(++p)
20函數前向宣告缺失調用在定義前且無原型在檔案頂部加原型或 .h
21值傳遞誤以為能修改實參void swap(int x,int y){...}傳址 void swap(int *x,int *y)
22實參形參型別不符fun(float,float) 傳 int加強制轉型或修改原型
23不同型別指標混用int *p1; float *p2; p2=p1;嚴格型別匹配,需轉型
24函數引數求值順序未定義printf("%d %d %d", i, ++i, ++i);拆分為多句,避免副作用
25陣列名自增for(; p用指標 int *p=a; p++
26結構體型別與變數混淆struct S {...}; S.num=1;先宣告變數 struct S s; s.num=1;
27檔案模式錯誤/未開啟fopen("r") 卻 fputc檢查返回值,模式匹配操作

防錯清單

  1. 編譯開啟 -Wall -Wextra -Werror。
  2. 變數宣告即初始化。
  3. 指標用前檢查 NULL。
  4. 字串操作用 strncpy/snprintf 限長。
  5. 迴圈邊界採用 < n 而非 <= n-1。
  6. 檔案操作必檢 fopen 返回值。
  7. 函數原型前置,避免隱式宣告。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved