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

C 語言指針接收字符串:函數參數指針修改不影響外部指針值

     編輯:程式設計綜合問答

現象

函數 `getword(char *str)` 內 `str++` 移動局部副本,返回時外部指針仍指向原位置,導致無法正確獲取字符串。

原因

C 語言**值傳遞**:函數接收指針**副本**,函數內修改副本指向不影響實參指針。

解決方案

方案一:雙重指針


bool getword(char **out) {
    char buf[100]; char *p = buf;
    // ... 填充 p ...
    *out = strdup(buf); // 調用者需 free
    return true;
}
// 調用
char *str; getword(&str);

方案二:調用者分配緩衝區,傳入指針


void getword(char *buf, int size) {
    // 直接寫入 buf,不移動 buf 指針
    int i=0, ch;
    while ((ch=getchar())!=EOF && ch!='\n' && i

最佳實踐

  • **調用者分配內存**,函數只負責填充,所有權清晰。
  • 返回狀態碼指示成功/失敗/截斷。
  • 避免在函數內 `malloc` 返回指針,易導致洩漏(調用者不知需 `free`)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved