Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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++ 复制LPTSTR的数组_C++_Memory Management_Struct - Fatal编程技术网

C++ 复制LPTSTR的数组

C++ 复制LPTSTR的数组,c++,memory-management,struct,C++,Memory Management,Struct,我有一个表示LPSTR数组的结构,定义如下: struct MyStruct { DWORD cbString; LPTSTR * pbString; } 我需要将此结构复制到另一个相同的结构。我的问题是,如何为目标结构分配内存?我的第一反应是: destStruct.pbString = (LPTSTR*)malloc(totalSizeOfSrcStrings * sizeof(TCHAR)) for(int i = 0; i < srcStruct.cbStrin

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

正如brightstar指出的,它应该是sizeofCHAR,而不是sizeofTCHAR

LPTSTR=TCHAR*


LpSTR= char */p>,但在C++中,你别无选择只能投MALOC的结果,你仍然可以避免在Sigeof下使用类型化的无用的实践。在您的例子中,第一个malloc中的错误正是由以下原因引起的:出于某些无法解释的原因,您在那里使用了sizeofTCHAR,而正确的元素大小实际上是sizeofltstr

同样,不要在sizeof下使用typenames。您的原始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风格的强制转换也可能是个坏主意,但代码看起来可能需要交叉编译。

据我记忆所及,它应该是char*,因此sizeofTCHAR应该是sizeofCHARLong字符串指针。由Microsoft定义为8位字符的数组。这很好:_tcslensrcStruct.pbString[i]*sizeofTCHAR,您编译过这段代码吗?我的意思是键入LPTSTR。我更新了帖子来反映这一点。一个接一个的bug,每个人都忘记了零终结者。使用strlenxxx+1。你正在使用C++,用复制构造函数和析构函数做正确的方法。所以第一个Maloc应该是SrCuthStudio CBSt*siZoFLPTSTR,然后使用for循环写?我是愚蠢的吗?sizeofLPTSTR不是简单地返回指针的大小而不是字符类型的大小吗?啊,是的,他想要一个LPTSTR数组。。。很遗憾,你的问题中有一个拼写错误。既然这个问题已经解决了,你的答案是错误的。