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

C++ char* 與 char[] 的區別:字符串字面量不可修改

     編輯:程式設計綜合問答

現象

char *str = "hi,guys!"; // 指向字符串字面量(只讀區)
strcpy_s(str, 6, "aaaaa"); // 運行時崩潰:寫入只讀內存

原因

  • char *str = "...":str 指向編譯器生成的 字符串字面量,存儲在 只讀數據段,任何修改嘗試導致未定義行為(通常崩潰)。
  • char str[] = "...":在棧上分配數組,複製 字面量內容,擁有讀寫權限。

正確用法

  1. 需修改內容:
    char str[] = "hi,guys!"; // 或
    char *str = malloc(20); strcpy(str, "hi,guys!"); // 記得 free
    
  2. 僅讀取:const char *str = "hi,guys!"; 加 const 防誤修改,編譯器會報錯。
  3. 核心概念

    字符串字面量 ≠ 字符數組。前者是編譯期常量,後者是運行期可變緩衝區。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved