char ** 怎么赋值给string

女神打Boss 2015-05-19 06:08:14

#include <string>
#include <iostream>
using namespace std;
int main()
{
char** pP = NULL;
string str = 0;
pP = (char**)calloc(128, sizeof(char*));
for (int i = 0; i < 128; ++i)
{
pP[i] = (char*)calloc(128, sizeof(char));
}
pP[1000] = "ddd";
str = pP[1000];///这里会报错
printf("%s ", pP[1000]);
return 0;
}




以上代码去掉str = pP[1000];就正常运行可以输出ddd

这里怎么把pP[1000]赋值给str
...全文
422 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
女神打Boss 2015-05-20
  • 打赏
  • 举报
回复
这个我找到错误的地方了,是string str = 0; 错误 把整形复制给string类型
幻夢之葉 2015-05-20
  • 打赏
  • 举报
回复

    string str = 0;
    char **p = new char *[10];
    for (int i = 0; i < 10; ++i)
    { //加上这段内存分配
        pP[i] = (char*)calloc(128, sizeof(char));
    }
    p[0] = "aaa";
    str = p[0];
    printf("%s\n", str);
女神打Boss 2015-05-20
  • 打赏
  • 举报
回复
引用 5 楼 goodluck028 的回复:
二师兄和三师兄说得对,补充一点,从异常信息看,p[1000]取到了0值,这个值又被你当指针用了,所以抛了null pointer

	string str = 0;
	char **p = new char *[10];
	p[0] = "aaa";
	str = p[0];
	printf("%s\n", str);
这样为什么错了
女神打Boss 2015-05-20
  • 打赏
  • 举报
回复
引用 1 楼 focuslight 的回复:
string str(pP[1000]);
和我写的那种方式一样,在编译器调试就会报错,同样的错误我上面有图, 但是运行exe文件就可以正常,例子是这样的 但问题是我用到mfc的项目里运行exe文件也报错的。
goodluck028 2015-05-20
  • 打赏
  • 举报
回复
二师兄和三师兄说得对,补充一点,从异常信息看,p[1000]取到了0值,这个值又被你当指针用了,所以抛了null pointer
女神打Boss 2015-05-20
  • 打赏
  • 举报
回复
引用 2 楼 tangtangtangbaoli 的回复:
pP = (char**)calloc(128, sizeof(char*)); 相当于开辟了128个存放指针的指针数组,而pp是数组的首地址 for (int i = 0; i < 128; ++i) { pP[i] = (char*)calloc(128, sizeof(char)); } 每个数组里面的指针存放了一个char类型128字节的数组的地址 pP[1000] = "ddd"; str = pP[1000];///这里会报错 pp一共才分配了128个存放指针的数组空间,你确往1000个位置写指针值 肯定把这块堆内存空间 给破坏了!
引用 3 楼 hnwyllmm 的回复:
二师兄说的对啊
如果去掉 str = pP[1000];这句 就正常运行了,
女神打Boss 2015-05-20
  • 打赏
  • 举报
回复

string str = "\0";
char **p = new char *[10];
p[0] = "aaa";
str = p[0];
printf("%s\n", str);
这样就不会有问题了
羽飞 2015-05-19
  • 打赏
  • 举报
回复
二师兄说的对啊
tangtangtangbaoli 2015-05-19
  • 打赏
  • 举报
回复
pP = (char**)calloc(128, sizeof(char*)); 相当于开辟了128个存放指针的指针数组,而pp是数组的首地址 for (int i = 0; i < 128; ++i) { pP[i] = (char*)calloc(128, sizeof(char)); } 每个数组里面的指针存放了一个char类型128字节的数组的地址 pP[1000] = "ddd"; str = pP[1000];///这里会报错 pp一共才分配了128个存放指针的数组空间,你确往1000个位置写指针值 肯定把这块堆内存空间 给破坏了!
Aist-memory 2015-05-19
  • 打赏
  • 举报
回复
string str(pP[1000]);

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧