【发布时间】:2021-01-28 13:47:05
【问题描述】:
如何创建固定长度字符串的动态数组?
我创建了类 AString,它具有指向结构 _str 的指针,该结构具有固定长度的数组 data。
如何赋值,有什么问题?
#include "stdafx.h"
#include <iostream>
struct _str {
char data[20];
};
class AString {
public:
AString();
~AString();
void Add(_str string);
private:
_str *str;
int count;
};
AString::AString() {
std::cout << "Constructor" << std::endl;
str = nullptr;
count = 0;
}
AString::~AString() {
std::cout << "Destructor" << std::endl;
if (str != nullptr) delete[] str;
}
void AString::Add(_str string) {
_str *str2 = new _str[count+1];
for (int i=0;i<count;i++) {
str2[i] = str[i];
}
delete[] str;
str = str2;
count++;
str[count-1] = string;
}
int _tmain(int argc, _TCHAR* argv[])
{
AString astring;
_str str1;
str1.data="0123456789012345678"; // cannot convert from 'const char[20]' to 'char[20]'
astring.Add(str1);
std::cin.get();
return 0;
}
str1.data="0123456789012345678";: 无法从 'const char[20]' 转换为 'char[20]'
想要:
不使用_str str1;,使用char str1[20];
【问题讨论】:
-
AStrring需要一个指向可以更改的数组的指针,但不能更改字符串文字。您必须决定是否要使用字面量的存储,但将AString转换为不可变类型,或者是否要将字符串字面量复制到可修改的数组中。 -
这能回答你的问题吗? Assigning value to char array
-
您的逻辑有误。你的析构函数
delete[]s 指向的数组,但你从来没有new[]一个数组。 -
“动态数组”在 C++ 中拼写为“
std::vector”。 -
为什么不使用
std::array<char, 20>?
标签: c++