Code Bye

char ** 怎么赋值给string

 
#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

20分
string str(pP[1000]);
5分
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个位置写指针值 肯定把这块堆内存空间 给破坏了!
二师兄说的对啊
引用 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];这句
就正常运行了,

二师兄和三师兄说得对,补充一点,从异常信息看,p[1000]取到了0值,这个值又被你当指针用了,所以抛了null pointer
引用 1 楼 focuslight 的回复:

string str(pP[1000]);

和我写的那种方式一样,在编译器调试就会报错,同样的错误我上面有图,
但是运行exe文件就可以正常,例子是这样的

但问题是我用到mfc的项目里运行exe文件也报错的。

引用 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);

这样为什么错了

15分
    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);
这个我找到错误的地方了,是string str = 0;
错误

把整形复制给string类型

string str = "\0";
char **p = new char *[10];
p[0] = "aaa";
str = p[0];
printf("%s\n", str);

这样就不会有问题了


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明char ** 怎么赋值给string