C++ 创建一个简单的LPWSTR数组

C++ Creating a simple array of LPWSTR's

本文关键字:简单 LPWSTR 数组 一个 创建 C++      更新时间:2023-10-16

作为一个c++新手,我似乎不能得到这个权利,即使我知道它应该很简单:{-我需要创建一个LPWSTR数组,然后用唯一的字符串填充它。我们的想法是做一些像这样简单的事情:

LPWSTR *wszArray = new LPWSTR[5];
for(int x = 0; x < 5; x++)
{
    swprintf(wszArray[x], "somestring_%d", x);
}

我知道我没有为LPWSTR分配内存,但是在尝试了一些事情之后,我没有多少运气。此外,我不确定如果数组应该被释放后,一旦我完成了字符串。

您现在拥有的是指向宽char指针的单个指针。然后用5个动态分配的指向宽char的指针的数组的地址初始化它。就目前而言,这很好,但是是否为字符串本身分配任何空间,仅用于指向5个字符串的指针。然后需要为字符串本身分配空间:

for (int i=0; i<5; i++) {
    array[i] = new char[13];
    swprintf(array[i], L"somestring_%d", i);
}

是的,您应该在使用完后删除您分配的空间。它看起来像这样:

for (int i=0; i<5; i++)
    delete [] array[i];
delete [] array;

哎呀,你可能不应该这样做,而是使用这样的东西:

std::vector<std::wstring> array;
for (int i=0; i<5; i++) {
     std::wostringstream temp;
     temp << L"somestring_" << i;
     array.push_back(temp.str());
}

在这种情况下,您可以使用array[i].c_str()检索"LPWSTR"。但是,您根本不需要显式地分配或释放任何内存。

实际上LPWSTR已经是一个指针了你应该这样做

LPTSTR pBuffer; // TCHAR* 
pBuffer = new TCHAR[128]; // Allocates 128 or 256 BYTES, depending on compilation.

,然后for循环将会很好。对于unicode长度的字符串,您需要在字符串前加上L like in L"your string"

之后你需要释放使用delete[]

分配的内存

:

delete[] pBuffer;

有关更多文档,您可能需要阅读:

http://www.codeproject.com/Tips/76252/What-are-TCHAR-WCHAR-LPSTR-LPWSTR-LPCTSTR-etc

LPWSTR是MS Windows中的unicode长字符串指针,尝试使用L"形式的字符串,例如:

swprintf (wszArray [x], L"somestring_ % d",x);

Windows中的Unicode宏可通过使用#define Unicode获得,在MS VS中有一个使用Unicode字符串的设置,当设置时,它将为您定义Unicode。

LPWSTR与wchar_t*相同,且LPSTR为char*。

在c++中分配内存时,它应该总是被释放的,所以答案是肯定的。

学习和做一些研究和开发是不同的方面。但是您不应该使用这些本机方法进行字符串处理。请使用std::stringstringstreamCString等类。

  • std::string被许多人使用(不是我!),它不支持<<操作符,不支持格式化函数,但支持其他函数。
  • stringstream是丰富的,不支持格式化函数,但<<操作符,在编译时解析,是类型安全的。
  • CString支持格式化功能和其他常用字符串功能。不支持<<操作符。它可以很好地处理ANSI/Unicode问题。如果您不使用MFC, 仍然可以通过#include<atlstr.h>在非MFC项目中使用

我实际上也是c++的新手(只完成Deitel c++书籍,仅此而已),我只喜欢CString:-(如果我同意允许项目在项目设置中接受MFC库,如果我愿意,我将整个库包含在头文件中,那么我可以做一些像

这样的事情
CString str="";
CArray<CString,CString> arr;
for(int i=0;i<n;i++)
{ 
   str.Format("something_%d",i);
   arr.Add(str);
} 

如果你真的很喜欢LPWSTR,上面的方法也适用于它。CString是一个用来处理ANSi和unix代码的类。: -)