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

C 語言字符串拼接:為何指針指向字面量不能修改及正確做法

     編輯:程式設計綜合問答

錯誤代碼


char *str = "awgweg";
char c = 'c';
*str += c; // 錯誤:修改字符串字面量導致未定義行為(段錯誤)

原因

char *str = "..." 讓指針指向**只讀數據段**的字符串字面量。任何嘗試修改該內存的操作 (*str = ..., strcat, sprintf) 都會觸發段錯誤。

正確做法:使用字符數組


char str[100] = "awgweg"; // 分配在棧上,可寫
char c = 'c';
size_t len = strlen(str);
str[len] = c;
str[len + 1] = '\0'; // 手動添加結束符
// 或安全版
snprintf(str + len, sizeof(str) - len, "%c", c);

動態拼接 (多次/未知長度)


char *str = malloc(INIT_SIZE);
strcpy(str, "awgweg");
// 每次拼接前檢查剩餘空間,不足 realloc
// 最後 free(str);

關鍵區別

聲明存儲區可修改適用場景
char *p = "lit"只讀數據段否只讀常量字符串
char arr[] = "lit"棧/數據段是需修改/拼接的字符串
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved