make和c ++中指向字符串的指针数组

时间:2016-09-14 22:17:09

标签: c++ pointers

我正在用c ++编写一个类,它应该将字符串的指针添加到数组中。我没有添加指向字符串的指针,而只是将第一个字符添加到数组中,但我想能够在之后调用整个字符串。如何将字符串的指针添加到列表中,以便打印出整个字符串?

class Listptr{
    public:
        Listptr();
        void append(char *item);
    private:
        int size = 5;
        char * buffer;
};

Listptr::Listptr(){
    buffer = (char*)malloc(size);
    for(int i=0; i<size; i++){
        buffer[i] = NULL;
    }
}

void Listptr::append(char *item){
    for(int i=0; i<size; i++){
        if(buffer[i] == NULL){
            buffer[i] = *item;
            break;
        }
    }

    for(int i=0; i<size; i++){
        cout << " " << buffer[i];
    }
}


int main() {
    Listptr test;
    char val[] = "test";
    char val2[] = "test2";
    test.append(val);
    test.append(val2);

}

1 个答案:

答案 0 :(得分:1)

您应该使用std::stringstd::vector<std::string>或其他内容,正如我在评论中提到的那样。但是,您的代码存在一些问题,我已经在下面修复了这些问题。主要是你想要一个指向char数组的指针,即一个char**,而不是char*,然后你需要检查以确保你不会尝试打印一个char数组&#39;只是一个空指针。您还没有正确使用malloc。因此,出于教育目的,要了解你做错了什么而不仅仅是说'停止它',&#34;这是固定代码:

class Listptr{
    public:
        Listptr();
        void append(char *item);
    private:
        int size = 5;
        char ** buffer; // char**
};

Listptr::Listptr(){
    buffer = (char**)malloc(size * sizeof(char**)); // char**
    for(int i=0; i<size; i++){
        buffer[i] = NULL;
    }
}

Listptr::~Listptr() {
    // Add destructor to free malloc-allocated memory when we're done
    free(buffer);
}

void Listptr::append(char *item){
    for(int i=0; i<size; i++){
        if(buffer[i] == NULL){
            buffer[i] = item;
            break;
        }
    }

    for(int i=0; i<size; i++){
        if (buffer[i] != NULL) { // Do not dereference null pointer
            cout << " " << buffer[i];
        }
    }
}


int main() {
    Listptr test;
    char val[] = "test";
    char val2[] = "test2";
    test.append(val);
    test.append(val2);
}

输出

 test test test2