我有两个变量:
char** A;
std::string B;
这样的作业发生在代码的某处:
B = A[0];
我应该如何给A赋值,以便正确地进行赋值。
我试过了:
char* A_ = NULL;
A_ = (char*)"abcd";
A = &A_
如果稍后进行分配,我会收到如下错误:
Invalid read of size 8.
请帮助解决此问题。感谢。
答案 0 :(得分:1)
没有A
可能符合您要求的单一作业,因为有两项必要的作业;
A
,使其值为有效char *
char *
以指向包含nul终止字符串的char
数组的(第一个字符)。例如,假设B
是静态的
std::string B;
void some_func()
{
char some_thing[] = "abcdefg";
char *p = some_thing; // same effect as A[0] = some_thing or as *a = some_thing
char **A = &p;
B = A[0]; // note the assignment COPIES some_thing
// p and some_thing both cease to exist as function returns
// that is OK as B contains a copy of some_string
}
请注意,我已根据您的要求仔细构建了此功能。但是,您要做的是容易出错(例如,很容易以导致未定义行为的方式滥用任何指针),因此在C ++中通常被认为是不好的做法。
答案 1 :(得分:0)
我认为直接访问char **到A [0]是不可能的,因为它不是2维,下面你可以试试
char **str = NULL;
char *st = NULL;
st = "Hello";
str = &st;
printf(" %s ", *str);
st = "World";
printf(" %s ", *str);
答案 2 :(得分:-1)
使用单个指针。双指针类似于2d数组。
char* A;
std::string B;
A = (char*)&("abcd");
B = A;