gpt4 book ai didi

c++ - 从自定义集合中读取数据(结构数组)

转载 作者:太空狗 更新时间:2023-10-29 21:39:21 24 4
gpt4 key购买 nike

我是 c++ 的初学者..所以请帮我解决这个问题。

尝试从集合中读取,在我尝试过的一个实现版本中,控制台有一些提示,另一个测试..显示数字,所以它可能是指向字符串的指针...

代码如下

DataCollection.h

typedef struct _DataC
{
char* buffer;
UINT Id;
} DataC;

void GetDataC( int ArrSize, DataC** DArr );

DataCollection.cpp

#include "DataCollection.h"

void GetDataC( int ArrSize, DataC** DArr )
{

int count = 0;
int strSize = 10;
*DArr = (DataC*)CoTaskMemAlloc( ArrSize * sizeof(DataC));
DataC* CurData = *DArr;
char TestS[] = "SomeText00";
for ( int count = 0; count < ArrSize; count++,CurData++ )
{
TestS[strSize-1] = count + '0';
CurData->Id = count;
CurData->buffer = (char*)malloc(sizeof(char)*strSize);
strcpy(CurData->buffer, TestS);
}
}

测试集合:

int main(void)
{

StpWatch Stw;long ResSw;

DataC* TestDataArr;// maybe use DataC TestDataArr[] instead...

GetDataC(100000, &TestDataArr);
}

如何在循环中读取集合?

对于...

std::cout<<TestDataArr[count].buffer<<std::endl;

还是?

std::cout<<TestDataArr->buffer<<std::endl;

在循环中读取每个元素的正确实现是什么?

感谢您的宝贵时间。

最佳答案

DataC* TestDataArrDataC TestDataArr[] 是同一件事。也就是说,当您尝试引用 TestDataArr 时,您可能会做以下两件事之一:

TestDataArr[index].buffer

(TestDataArr + index)->buffer

因为 TestDataArr 是一个指针,您必须在使用它的任何成员之前对它进行引用,这就是索引所做的。使用第一种方法,作为数组索引,指针在数组中的 index 处取消引用,然后您可以使用 . 访问对象的成员。第二种方法 index 将指针推进到内存位置,但不会取消引用指针,因此您必须使用 -> 才能访问其成员。

因此,要循环打印缓冲区,您可以使用:

std::cout << TestDataArr[count].buffer << std::endl;

std::cout << (TestDataArr + count)->buffer << std::endl;

您提到的闪烁可能是因为 TestS[strSize-1] = count + '0'; 其中 count + '0' 在ASCII 范围。其中一些字符会导致控制台发出哔哔声。

关于c++ - 从自定义集合中读取数据(结构数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33288636/

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