复制LPTSTR的数组
Copy an array of LPTSTR
我有一个表示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循环中的代码是否有必要。
与往常一样,虽然您别无选择,只能在C++中强制转换malloc
的结果,但您仍然可以避免在sizeof
下使用类型名的无用做法。在您的情况下,第一个malloc
中的错误正是由以下原因引起的:对于一些无法解释的原因,您在那里使用了sizeof(TCHAR)
,而正确的元素大小实际上是sizeof(LPTSTR)
。
同样,不要在sizeof
下使用typename。您的原始malloc
可以以更安全的方式重写为
destStruct.pbString =
(LPTSTR*) malloc(totalSizeOfSrcStrings * sizeof *destStruct.pbString);
周期可能如下
for(int i = 0; i < srcStruct.cbString; i++)
destStruct.pbString[i] =
(LPTSTR) malloc((_tcslen(srcStruct.pbString[i]) + 1) * sizeof *destStruct.pbString[i]);
附言:当然,在这种情况下,C风格的转换可能也是个坏主意,但代码看起来可能需要交叉编译。
正如brightstar所指出的,它应该是sizeof(CHAR),而不是sizeof(TCHAR)
LPTSTR=TCHAR*
LPSTR=CHAR*
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '