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

时间:2011-08-13 04:44:14

标签: c++ windows arrays string winapi

作为一个C ++ noob,我似乎无法做到这一点,即使我知道它应该很简单:{ - 我需要创建一个LPWSTR数组,然后用唯一的字符串填充它。我的想法是做一些简单的事情:

LPWSTR *wszArray = new LPWSTR[5];

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

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

任何建议都会很棒。

5 个答案:

答案 0 :(得分:2)

你现在拥有的是指向宽字符指针的单个指针。然后,您将使用5个动态分配指针到宽字符的数组的地址初始化它。这样就可以了,但为字符串本身分配任何空间,仅用于指向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;
OTOH,你可能不应该这样做,而是使用类似的东西:

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].str()检索“LPWSTR”。您根本不必明确分配或释放任何内存。

答案 1 :(得分:1)

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 ++中分配内存时,它应该总是免费的,所以答案是肯定的。

答案 2 :(得分:1)

实际上LPWSTR已经是你应该做的指针

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

然后for循环就可以了。 对于unicode-long字符串,您需要在字符串前加上 L就像在L"your string"

中一样

以后需要释放使用delete[]

分配的内存

喜欢:

delete[] pBuffer;

有关您可能希望阅读的更多文档:

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

我实际上也是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和Unixcode的类......: - )