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

C 語言 char* 轉 char[]:memcpy 或直接指向數組首地址避免 malloc

     編輯:程式設計疑難解答

場景

文件讀取到 char *bufheader (malloc),需拷貝到定長數組 BYTE m_byData[MAX] (MAX > BUFLENGTH)。

方案一:memcpy(通用、安全)


memcpy(m_byData, bufheader, BUFLENGTH);
// 使用完釋放
free(bufheader);

方案二:直接讓指針指向數組(零拷貝、推薦)


BYTE m_byData[MAX];
char *bufheader = (char *)m_byData;  // 直接指向數組首地址
FILE *fp = fopen(filename, "rb");
fread(bufheader, 1, BUFLENGTH, fp);  // 直接讀入數組
// 後續直接用 m_byData,無需拷貝、無需 free

**優勢**:省去 malloc/free、省去 memcpy、消除內存洩漏風險、緩存局部性更好。

方案三:結構體封裝(C++ 風格)


struct Buffer {
    BYTE data[MAX];
    size_t len;
    void readFromFile(const char* filename) {
        FILE* fp = fopen(filename, "rb");
        len = fread(data, 1, MAX, fp);
        fclose(fp);
    }
};

關鍵提醒

  • m_byData = bufheader **非法**:數組名是常量指針,**不可作為左值賦值**。
  • 若必須 malloc,記得 free(bufheader),且 memcpy 長度以實際讀取返回值 fread 為準,而非 BUFLENGTH。
  • MAX > BUFLENGTH 確保數組足夠大,防止溢出。

最佳實踐:**直接聲明數組,讓文件讀取指針指向數組首地址**,零拷貝、零管理、最高效。

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