Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指向指针的指针,动态内存分配_C++_Arrays_String - Fatal编程技术网

C++ 指向指针的指针,动态内存分配

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&

我有一个字符串的字符数组,其中每个字符串都以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<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;