C++ 使用字符数组保存任意大小对象的数组,对齐问题?

C++ 使用字符数组保存任意大小对象的数组,对齐问题?,c++,odbc,C++,Odbc,我希望将一个参数数组传递给SQLBindParameters,并将该数组保存在一个char数组中(因为我事先不知道类型)(我希望“数组”中的所有元素都相同) 我将有一个指向示例参数类型的指针,以及参数的大小 void *buffer = getBuffer(); int bufferLength = getBufferLength(); const int numElements = 200; //for example char *array = new char[bufferLength

我希望将一个参数数组传递给SQLBindParameters,并将该数组保存在一个char数组中(因为我事先不知道类型)(我希望“数组”中的所有元素都相同)

我将有一个指向示例参数类型的指针,以及参数的大小

void *buffer = getBuffer();
int bufferLength = getBufferLength();
const int numElements = 200; //for example

char *array = new char[bufferLength * numElements];

for(int i=0; i < numElements; ++i)
{
    memcpy(array + (i * bufferLength), buffer, bufferLength)
}

// now use array in SQLBindParameter call    
void*buffer=getBuffer();
int bufferLength=getBufferLength();
常数整数=200//例如
char*array=new char[bufferLength*numElements];
对于(int i=0;i

在没有任何对齐问题的情况下,这是否会按预期工作?(也就是说,就像我刚刚声明了一个正确类型的数组一样)

vector
只是动态分配内存的连续块的包装,换句话说,数组。因此,如果此程序将与分配了
malloc
new
的数组一起工作,则应继续与
向量一起工作


(当然,除非它只是在数组中“意外”工作,但是
向量不太可能带来额外的问题。)

假设您正在使用
向量
,分配器在引擎盖下使用
运算符new
,之后,C++标准保证了<代码> char < />代码> < <代码> > <代码>将被适当对齐以供任何数据类型使用。 编辑:是的,
新字符[]
保证与任何类型的字符对齐


Edt2:注意,本地(栈)数组<代码> char fo[]/COD>没有这样的对齐保证。

< P> C++中的<强> 23.2.4<强>保证向量的每个元素连续存储:

a的要素 向量是连续存储的,这意味着如果v是向量,T是某种类型
除了bool,它服从身份&v[n]==&v[0]+n对于所有的0,你问的是同一件事吗?事实上,我甚至不应该提到向量,我的问题更多的是它是否有效,即使vectorBuffer被声明为char*vectorBuffer=new char[]@Troubadour:不,他不是。他询问std::vector使用的内存是否适合放入任何数据。你的意思是,具有自动存储持续时间的数组。(和/或静态存储持续时间?)。请准确点!问题已经改变,这并不重要,但标准是否保证
vector
从分配的数组的开头开始定位向量的元素?您希望如此,因为通过设计,向量应该替换动态分配的数组,所以如果它缺少这些数组的一个有用属性,那就太可惜了。但我不记得见过这样的保证。对于其他容器,由于整个
rebind
过程正在进行,它不一定将元素定位在已分配块的开头。