首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言指針初始化錯誤導致 strcpy 運行崩潰的解決方法

     編輯:程式設計疑難解答

崩潰代碼

main() {
    char* greeting = "hello "; // 指向只讀字面量區
    char* name;                // 未初始化野指針
    scanf("%s", name);         // 寫入隨機地址
    strcpy(greeting, name);    // 嘗試修改只讀內存
    printf("%s", greeting);
}

三大錯誤

  1. greeting 指向字符串字面量(只讀段),不可修改。
  2. name 未分配內存,scanf 寫入任意地址。
  3. strcpy 目標地址不可寫,導致 Segmentation Fault。

修正版

int main() {
    char greeting[40] = "hello "; // 可修改的數組
    char name[40];                // 分配棧內存
    scanf("%s", name);            // 安全讀入
    strcpy(greeting, name);       // 合法拷貝
    printf("%s", greeting);
    return 0;
}

核心原則

  • 字符串字面量 const char* 僅供讀取,需拷貝到數組中才能修改。
  • 指針使用前必須指向有效內存(數組、malloc 返回值)。
  • 目標緩衝區大小必須 ≥ 源字符串長度 + 1(結束符)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved