如何为 char** 类型变量提供适当的值,以便将其分配给字符串变量

How to give proper value to a char** type variable so that it could be assigned to a string variable?

本文关键字:分配 变量 字符串 char 类型变量      更新时间:2023-10-16

我有两个变量:

char** A;
std::string B;

像这样的赋值发生在代码中的某个位置:

B = A[0];

我应该如何给 A 赋值,以便分配正确进行。

我试过这个:

char* A_ = NULL;
A_ = (char*)"abcd";
A = &A_

稍后进行分配时,我收到如下错误:

Invalid read of size 8.

请帮助解决此问题。谢谢。

没有满足您要求的A单一的分配,因为需要两个分配;

  1. 初始化A,使其值为有效char *的地址
  2. 初始化该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++中的不良做法。

我认为直接访问 char** 到 A[0] 是不可能的,因为它不是二维的,您可以在下面尝试以下操作

 char **str = NULL;
    char *st = NULL;
    st = "Hello";
    str = &st;
    printf(" %s ", *str);
    st = "World";
    printf(" %s ", *str);

使用单个指针。双指针类似于二维数组。

char* A;
std::string B;
A = (char*)&("abcd");
B  = A;