You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何快捷初始化动态分配的char数组(无需循环或多行代码)

如何快捷初始化动态分配的char数组(无需循环或多行代码)

嘿,我懂你想找那种像静态数组char arr[]={"Text"};一样,一行就能搞定动态char数组初始化的方法,不想写循环或者一堆冗余代码对吧?这里有几个实用的方案,帮你轻松实现:

方案1:用strncpy直接复制字符串

这是最直接的C风格方法,记得要包含<cstring>头文件,同时注意给字符串终止符'\0'留位置,避免越界:

#include <iostream>
#include <cstring>
using namespace std;

int main() {
    char *ptr = new char[10];
    // 复制字符串,最多9个字符,留一个位置放'\0'
    strncpy(ptr, "Hello World", 9);
    ptr[9] = '\0'; // 手动添加终止符,确保输出正常
    cout << ptr << endl;
    delete[] ptr; // 千万别忘了释放动态分配的内存!
    return 0;
}

strncpy会帮你把字符串内容复制到动态数组里,指定长度能有效防止数组溢出,比循环赋值简洁多了。

方案2:借助std::string过渡(C++风格)

如果你更偏向C++的写法,用std::string来中转再复制到动态数组里也很方便,还能自动处理字符串长度:

#include <iostream>
#include <string>
using namespace std;

int main() {
    string init_str = "Hi there!";
    // 根据字符串长度分配内存,+1是给终止符留位置
    char *ptr = new char[init_str.size() + 1];
    // 复制字符串内容到动态数组
    init_str.copy(ptr, init_str.size());
    ptr[init_str.size()] = '\0'; // 添加终止符
    cout << ptr << endl;
    delete[] ptr;
    return 0;
}

这种方法不用手动算字符数,更安全也更符合现代C++的习惯。

另外,我得提一下你给出的代码里的小问题:<conio.h>是非标准头文件,getch()在很多编译器里不支持;而且你没有用delete[] ptr;释放动态内存,会造成内存泄漏,记得加上哦!

备注:内容来源于stack exchange,提问作者Tufail Gulzar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:44:14