复制LPTSTR数组

时间:2014-10-14 14:45:45

标签: c++ memory-management struct

我有一个表示LPSTR数组的结构,定义如下:

struct MyStruct {
    DWORD cbString;
    LPTSTR * pbString;
}

我需要将此结构复制到另一个相同的结构。我的问题是,如何为目标结构分配内存?我的第一直觉是:

destStruct.pbString = (LPTSTR*)malloc(totalSizeOfSrcStrings * sizeof(TCHAR))

for(int i = 0; i < srcStruct.cbString; i++) {
    destStruct.pbString[i] = (LPTSTR)malloc(_tcslen(srcStruct.pbString[i] * sizeof(TCHAR));
}

我不确定for循环中的代码是否必要。

2 个答案:

答案 0 :(得分:2)

像往常一样,虽然您别无选择,只能在{+ 1}}中使用malloc投射结果,但仍然可以避免在sizeof下使用类型名称的无用操作。在您的情况下,您的第一个malloc中的错误恰恰是由于:对于某些无法解释的共振,您使用了sizeof(TCHAR),而正确的元素大小实际上是sizeof(LPTSTR)

同样,请勿在{{1​​}}下使用类型名称。您的原始sizeof可以更安全的方式重写

malloc

循环可能如下所示

destStruct.pbString = 
  (LPTSTR*) malloc(totalSizeOfSrcStrings * sizeof *destStruct.pbString);

P.S。当然,在这种情况下进行C风格的演员也可能是一个坏主意,但代码看起来可能需要交叉编译。

答案 1 :(得分:0)

正如明星所指出的,它应该是sizeof(CHAR),而不是sizeof(TCHAR)

LPTSTR = TCHAR *

LPSTR = CHAR *