我正在用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);
}
答案 0 :(得分:1)
您应该使用std::string
和std::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