在 C++ 中使用指针初始化 char 数组或字符串

Posted

技术标签:

【中文标题】在 C++ 中使用指针初始化 char 数组或字符串【英文标题】:Initialize a char array or string with a pointer in C++ 【发布时间】:2020-07-04 02:13:14 【问题描述】:

我有一个指针,其中下一个 X 元素是 ASCII 字符,末尾带有 '\0'。我需要将 ASCII 字符保存在 char 数组或 string 类型中。

是否可以使用指针动态初始化C++ 中的stringchar 数组? 下面的代码无法编译并出现以下错误:

char symbol[11];
symbol = (packet+8);

错误:数组类型“char [11]”不可赋值

packet 是保存数据的指针,ASCII 字符从第 8 个位置开始)。

理想情况下,我希望避免遍历指针来初始化字符串或字符数组。

for (int i = 0; i < 11; i++) 
    symbol[i] = *(packet+8+i);

提前感谢您的所有帮助。

【问题讨论】:

什么是packet 您不能分配 c 字符串。你可以分配一个std::string std::string symbol = packet + 8; 应该可以正常工作。或者如果packet不是NUL终止的,那么std::string symbol(packet + 8, 11); @KorelK 数据包是一个 const u_char*。 @IgorTandetnik 我收到以下错误:从 'const u_char ' (aka 'const unsigned char *') 到 'std::string' 没有可行的转换。数据包的类型为 const u_char 【参考方案1】:

你可以使用std::copy来复制这样的内容:

char symbol[11];
std::copy(packet + 8, packet + 19, symbol);

或使用std::string 构造函数:

std::string symbol(packet + 8, packet + 19);

【讨论】:

以上是关于在 C++ 中使用指针初始化 char 数组或字符串的主要内容,如果未能解决你的问题,请参考以下文章

C++字符指针数组的初始化及赋值问题

如何从 C++ 中的 char 指针初始化 char 数组?

C 或 C++。如何比较给定 char * 指针的两个字符串?

指针数组数组指针函数指针指针函数总结

如何在 C++ 类中初始化二维字符指针

c++中,如果cout 或者cin char类型的数组名,指针,都会把字符串输出,而不是输出地址,