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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++字符指针数组的初始化及赋值问题相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <cstring>
using namespace std;
int main()

char* ch[2]="a","b";//初始化
char* l;
cin> > l;
ch[0]=l;//赋值
cout < <ch[0];
cin.get();
return 0;

以上代码编译可以通过,输入字符流后出现异常,0x00402732 处未处理的异常: 0xC0000005: 写入位置 0x00000001 时发生访问冲突,为什么赋值会出错?
字符指针相当于字符数组,那么一维字符指针数组应该相当于字符串数组吧.
我还想问的是,在C语言中对字符指针数组初始化可以用for加上malloc函数,那相应的在C++中可不可以用new来初始化呢?可以的话怎么初始化?
哦,是的,这个地方忽略了....其实我最想问的是怎么用new初始化char *a[2]....这个问题谁答出来分就给谁

参考技术A 只有在定义的同时这样(a[20]="what
for")赋值才行,其他不行,这是c语言规定的
要先定义然后再在其他地方赋值的话,就只能一个一个元素单独赋值,不过要是想达到同样的效果(类似a[20]="what
for"),对于字符串数组,可以用库函数strcpy(...)函数赋值,其他的话,你可以自己写函数给他们赋初值!!
参考技术B char *ptr_arr[N];
for (int i=0; i<N; ++i)
ptr_arr[i] = new char[M];


//...
for (int i=0; i<N; ++i)
delete []ptr_arr[i];

刚才不是说了么?
不过leewycyp说的也可以的!

-----------------
char* l;
cin>> l;

对一个没有指向的指针进行写入操作,导致了你的错误...

char *ptr_arr[N];
for (int i=0; i<N; ++i)
ptr_arr[i] = new char[M];


//...
for (int i=0; i<N; ++i)
delete []ptr_arr[i];
参考技术C
char* ch[2]= (new char[10]), (new char[20]);本回答被提问者采纳
参考技术D char
*ptr_arr[N];
for
(int
i=0;
i
>
l;
对一个没有指向的指针进行写入操作,导致了你的错误...
char
*ptr_arr[N];
for
(int
i=0;
i
评论
0
0
0
加载更多
第5个回答  2008-03-12 你的char* l;有错误,不能这么定义,不知道l该分配多少空间,可以用个数组嘛.char l[10];

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

【中文标题】在 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++字符指针数组的初始化及赋值问题的主要内容,如果未能解决你的问题,请参考以下文章

字符串数组与字符指针的区别

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

Visual C++中二级指针的定义,初始化,赋值问题

c语言中,为啥不能对字符指针变量指向的字符串再赋值?

字符串与C51的格式化输出

字符串的基本操作,初始化和赋值之类的区别,和数据名是一个常量指针不可以改变和赋值(盲点众多)