我有一个表示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循环中的代码是否必要。
答案 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 *