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

C++ 動態創建不定長字符數組:精確分配內存避免浪費

     編輯:程式設計綜合問答

需求

根據輸入字符串長度精確分配 `char*` 數組,不浪費額外空間。

實現函數

char* newCharArray(const char* src) {
    if (!src) return nullptr;
    size_t len = strlen(src);
    char* dest = new char[len + 1]; // +1 存放 '\0'
    strcpy(dest, src);
    return dest;
}

// 使用
int main() {
    const char* input = "任意長度字符串";
    char* arr = newCharArray(input);
    // 使用 arr...
    delete[] arr; // 釋放
    return 0;
}

現代 C++ 推薦:std::string / std::vector

#include <string>
#include <vector>

std::string s = "任意長度字符串"; // 自動管理內存,支援動態增長
// 或
std::vector vec(s.begin(), s.end());
vec.push_back('\0'); // 若需 C 風格字符串
char* cstr = vec.data();
  • 自動內存管理,無洩漏風險。
  • 提供豐富操作接口(查找、替換、子串、拼接)。
  • 與 C API 交互時用 `.c_str()` 或 `.data()`。

教學階段手動 new/delete 注意點

  • 必須 `new char[len+1]`,少一字節導致缺少結束符,引發未定義行為。
  • 配對 `delete[]` 而非 `delete`。
  • 異常安全:構造/拷貝可能拋出異常,建議封裝 RAII 類或直接用標準庫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved