如何为 char** 类型变量提供适当的值,以便将其分配给字符串变量
How to give proper value to a char** type variable so that it could be assigned to a string variable?
我有两个变量:
char** A;
std::string B;
像这样的赋值发生在代码中的某个位置:
B = A[0];
我应该如何给 A 赋值,以便分配正确进行。
我试过这个:
char* A_ = NULL;
A_ = (char*)"abcd";
A = &A_
稍后进行分配时,我收到如下错误:
Invalid read of size 8.
请帮助解决此问题。谢谢。
没有满足您要求的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++中的不良做法。
我认为直接访问 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;
相关文章:
- 何时在函数中声明堆栈分配变量?
- 取消引用指针并立即为其分配变量,导致分段错误
- 在C++中动态分配变量类型
- 在函数 (c++) 中分配变量类型和大小数组
- 无法在命名空间范围内分配变量
- 自我分配变量的定义
- 在 CUDA C++中分配变量 - 无法分配设备变量
- 在 CPP 中动态分配变量的数据类型
- 为什么无法在类主体中分配变量?
- const 类方法是否阻止在类外部分配变量?
- 从文件中分配变量,并使用定界符分配
- 分配指针后,是否可以为指针指向的事物分配变量名称?
- 读取外部文件并在类似xml的输入中分配变量
- 有没有办法在不分配变量的情况下将字符串连接到数字
- 如果使用alloca在内联函数中的堆栈上分配变量,那么在内联函数返回后,其引用是否有效
- 堆分配变量的结构成员对齐
- 包含溢出缓冲区的堆栈分配变量,也称为缓冲区
- 在 GetTransfer 之后,我在帐户 1 收到未分配变量错误。我无法弄清楚我搞砸了什么逻辑错误
- 对动态分配的变量的引用与指向相同动态分配变量的指针
- 在C++中为用户输入分配变量