C++ 指向指针的指针,动态内存分配
我有一个字符串的字符数组,其中每个字符串都以null结尾 指向数组的指针是第一个字符串的起始地址C++ 指向指针的指针,动态内存分配,c++,arrays,string,C++,Arrays,String,我有一个字符串的字符数组,其中每个字符串都以null结尾 指向数组的指针是第一个字符串的起始地址 const char* p = "I\0had\0a\0little\0lamb\0"; 如何存储其他4个字符串的起始地址 这是我应用的逻辑,但它不能正常工作: const char** stara(const char* p, int n) { const char** add=new char*[n]; int k=0; add[k]=p; for(i=1;i&
const char* p = "I\0had\0a\0little\0lamb\0";
如何存储其他4个字符串的起始地址
这是我应用的逻辑,但它不能正常工作:
const char** stara(const char* p, int n) {
const char** add=new char*[n];
int k=0;
add[k]=p;
for(i=1;i<p.size()) {
if(p[i]=='\0')
add[++k]=&p[i+1];
}
const char**stara(const char*p,int n){
常量字符**添加=新字符*[n];
int k=0;
加[k]=p;
对于(i=1;i您必须自己编写代码。您如何知道字符串的数量
假设您知道n
为4,并且需要4个指针,则可以执行以下操作:
const char *p0 = p;
const char *p1 = p0 + strlen(p0) + 1;
const char *p2 = p1 + strlen(p1) + 1;
const char *p3 = p2 + strlen(p2) + 1;
对于小字符串来说,这很好。但是如果您试图在运行时动态执行此操作,特别是如果您不知道要处理多少子字符串,那么请使用类似于以下内容的方法:
#include <vector>
const char* p = "I\0had\0a\0little\0lamb\0";
std::vector<char*> vec;
while (*p)
{
vec.push_back(const_cast<char*>(p));
p += (strlen(p) + 1);
}
// vec[0] = "I"
// vec[1] = "had"
// vec[2] = "a"
// vec[3] = "little"
// vec[4] = "lamb"
一个指针向量-我不知道你的问题是什么(就我所能理解的)与动态内存分配有关。我知道我必须创建指针,你能帮我更多吗,我是一个初学者谢谢,如果p是变量会怎么样。你能给我一个通用的方法,使用动态内存分配吗?你能告诉我在c++中使用新操作符的过程吗?没有很好的理由直接使用new[]
(用于学习目的除外)。std::vector
已经是一个可动态调整大小的数组。使用new[]时,代码会复杂得多
直接。使用new
不在您的问题范围内。如果需要,请编辑您的问题,并提供有关实际要求的更多详细信息。或者发布一个新问题。给定指向包含n个字符串(每个字符串以“\0”结尾)的字符数组中第一个元素的指针p,返回一个动态分配的所有n个字符串的起始地址数组。StackOverflow不是一个让人们为您做作业的地方。您需要先做自己的研究,编写自己的代码,然后在需要时询问有关它的具体问题。至于您的要求,请返回一个填充的std::vector
i这是最好的选择。但是,如果必须返回原始的char**
指针,则需要两步方法:循环输入字符串一次,以计算其中的子字符串数,然后分配char*
数组,然后再次循环输入字符串,将地址分配给数组。使用STL clas时,这要容易得多相反,她是一名教师。
#include <vector>
const char* p = "I\0had\0a\0little\0lamb\0";
std::vector<char*> vec;
while (*p)
{
vec.push_back(const_cast<char*>(p));
p += (strlen(p) + 1);
}
// vec[0] = "I"
// vec[1] = "had"
// vec[2] = "a"
// vec[3] = "little"
// vec[4] = "lamb"
const char** stara(const char* str)
{
const char* p = str;
int n = 0;
while (*p)
{
++n;
p += (strlen(p) + 1);
}
const char* *arr = new const char*[n+1];
p = str;
n = 0;
while (*p)
{
arr[n++] = p;
p += (strlen(p) + 1);
}
arr[n] = NULL;
return arr;
}
const char* *arr = stara("I\0had\0a\0little\0lamb\0");
// arr[0] = "I"
// arr[1] = "had"
// arr[2] = "a"
// arr[3] = "little"
// arr[4] = "lamb"
// arr[5] = NULL
delete[] arr;