char *p = ...; // 既有字符串,長度 ≥ 100
std::string s(p, 20); // 直接用 (指針, 長度) 構造函數,零拷貝 (SSO 除外)
**優點**:單行、無手動內存管理、異常安全、編譯器優化 (SSO 短字串無堆分配)。
| 場景 | 代碼 | 說明 |
|---|---|---|
| char[] 數組 | `char buf[100]; std::string s(buf, 20);` | 同樣適用 |
| 只知道結尾指針 | `std::string s(p, p + 20);` | 迭代器範圍構造 |
| 需保留原指針 const | `const char* cp = p; std::string s(cp, 20);` | const 正確性 |
| C++17 string_view (零拷貝視圖) | `std::string_view sv(p, 20);` | 不持有內存,僅引用,極快 |
| 舊式 C 風格 (不推薦) | `char *np = new char[21]; strncpy(np, p, 20); np[20]='\0'; std::string s(np); delete[] np;` | 手動管理、易漏洞、多分配 |
**`std::string s(ptr, len)` 是現代 C++ 最簡潔、安全、高效的標準寫法**。拒絕 `new`/`strncpy`/`malloc` 手動內存管理。