gpt4 book ai didi

c++ - C++ 结构中的动态内存分配

转载 作者:行者123 更新时间:2023-11-30 02:00:28 25 4
gpt4 key购买 nike

我不明白在 C++ 中动态分配结构成员所需的语法。基本上,我需要使用临时数组和 strlen 将 char 数组成员填充到精确大小。这是我的结构:

struct card
{
char *rank;
char *suit;
char color;
bool dealt;
char *location;
};

这是使用该结构的函数:

bool importCard(card *deckPtr, char *deckName);

我创建了一个包含 52 张卡片的数组并为其分配了一个指针,并将其作为第一个参数传递给该函数。 (deckPtr) 这是函数中的一个循环,应该将卡信息读入结构数据成员。

for(index=0;index<52;index++,deckPtr++)
{

fin >> *temp;
charCount=stringLength(temp);
deckPtr.*rank = new char[charCount+1];
stringCopy(*temp, deckPtr.*rank);

fin >> *temp;
charCount=stringLength(temp);
deckPtr.*suit = new char[charCount+1];
stringCopy(*temp, deckPtr.*suit);

if(deckPtr.*suit==('d')||deckPtr.*suit==('h'))
{
(*deckPtr).color='r';
}
else
{
(*deckPtr).color='b';
}

(*deckPtr).dealt=false;

deckPtr.*location = new char[11];
stringCopy(unshPtr, deckPtr.*location);

}

我收到三个编译错误:“rank”、“suit”和“location”“未在此范围内声明”。我究竟做错了什么?谢谢!

最佳答案

语法是deckPtr->rank, deckPtr->suit, deckPtr->location = new char[...]; .

但是您的编码风格更像 C 而不是 C++。相反,如果您使用现代 C++,以及方便的 RAII 类,如 std::string,您的代码将变得简化:只需使用 std::string 而不是原始 char* 指针,您不必关注内存分配和内存释放:它全部由 std::自动管理字符串和析构函数。

#include <string>

struct card
{
std::string rank;
std::string suit;
char color;
bool dealt;
std::string location;
};

而不是您自定义的 stringCopy() 函数,您可以只使用“自然” operator= 重载 std::string (即 destString = sourceString;).

要构建一个包含 52 张卡片的数组,只需使用 std::vector:

#include <vector>

std::vector<card> cards(52);

同样,内存分配由 std::vector 自动管理(并且,与原始 C 数组不同,您可以查询 vector 以获取其自身的元素计数,使用其size() 方法)。

关于c++ - C++ 结构中的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15120852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com