Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从自定义集合(结构数组)读取数据_C++_Performance_Pointers_Collections - Fatal编程技术网

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

C++ 从自定义集合(结构数组)读取数据,c++,performance,pointers,collections,C++,Performance,Pointers,Collections,我是c++的初学者。所以请帮我把这个弄对 试图从集合中读取,在我尝试过的一个版本的实现中,有一些来自控制台的Bipping,另一个测试。。显示数字,因此它可能是指向字符串的指针 代码如下 DataCollection.h typedef struct _DataC { char* buffer; UINT Id; } DataC; void GetDataC( int ArrSize, DataC** DArr ); DataCollection.cpp #include "

我是
c++
的初学者。所以请帮我把这个弄对

试图从集合中读取,在我尝试过的一个版本的实现中,有一些来自控制台的Bipping,另一个测试。。显示数字,因此它可能是指向字符串的指针

代码如下

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);
    }
}
如何在循环中读取集合

为了

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

std::cout问题在于
TestS[strize-1]=count+'0'。当您传递
ArrSize==100 0000
时,则在
for
循环中,
count+'0'
值在某一时刻超过了
char
的范围,并且您得到了
[0-31]
范围内的char值(不可打印字符)。至少使用

TestS[strSize-1] = '0' + count % (126 - '0');

测试的最后一个字符将在[48-126](ASCII可打印字符)范围内更改。

DataC*TestDataArr
DataC TestDataArr[]
是相同的。也就是说,当您尝试引用TestDataArr时,可以执行以下两种操作之一:

TestDataArr[index].buffer

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

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

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

std::cout std::cout@user2970916然后请检查
GetDataC()
因为这是bipping版本…等待检查。我把
而不是
->
@user2970916放在两种编译方法中。。。。。从vs控制台pc bips进行Biping。。你认识他们。。(第1版)
for(int count=0;condition;count++,collection++)with cout::collection->member
-(第2版)
for(int count=0;condition;count++)with cout::collection[count]。member
代码运行缓慢,非常感谢关注细节,这是一个测试的重要原因,比较<代码> char *//>代码> bSTR 速度,虽然我很快得出结论:C将数组排列为<代码> char */COD>更快,C++调试,但最终发布模式,BSTR Win。代码>BSTR
wchar\u t*
char*
。。。从最慢到最快,[char*]是最快的
TestDataArr[index].buffer
(TestDataArr + index)->buffer
std::cout << TestDataArr[count].buffer << std::endl;
std::cout << (TestDataArr + count)->buffer << std::endl;