在查看 C++ 代码时,我遇到了开发人员试图将新单元格添加到 char**
变量的一行。这样做时,下面是他用来为新单元格分配内存的代码行。
*(plantValue + (plantCount-1)) = (char *) malloc(sizeof(char) * SAPPlantStr.length());
其中 plantValue
是 char**
而 plantCount
是一个整数。
谁能解释一下上面的代码行,因为我无法理解。
提前致谢。
最佳答案
看起来你的代码中的 plantValue
是指向原始 C 风格字符串的指针数组的指针,即:
+----------+
plantValue --> | char * | --> String #1
(char **) +----------+
| char * | --> String #2
+----------+
| ... |
+----------+
| char * | --> String #N
+----------+
因此,该代码基本上是使用 malloc()
分配一个新的 C 风格字符串,并将指向它的指针存储在所表示的 char*
vector 中的一个槽中以上。
特别地,plantCount-1
是预分配指针数组中第一个可用槽的索引; plantValue + (plantCount-1)
指向那个插槽,并使用 *(plantValue + (plantCount-1)) = ...
写入由 malloc()
在那个插槽中。
请注意,上面的代码更多的是 C 而不是 C++;例如,在 C++ 中,您将使用 new[]
而不是 malloc()
来进行显式动态内存分配;但是,更好的是,在 C++ 中,您应该使用标准的容器类,例如 std::vector
和 std::string
而不是原始的 char*
拥有指针。这些 C++ 类自动管理它们自己的内存,并大大简化您的代码。
P.S. 另请注意,C 风格的字符串以 NUL 结尾,因此当您使用 malloc()
为新字符串分配内存时,您还应该考虑终止符当您计算总 长度时为 NUL(换句话说,您的代码中应该有 SAPPlantStr.length() + 1
)。
关于c++ - 在 C++ 中将内存分配给 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44883796/