如何快捷初始化动态分配的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
相关产品推荐
相关产品推荐

