C++ 创建一个简单的LPWSTR数组
C++ Creating a simple array of LPWSTR's
作为一个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-etcLPWSTR是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::string
、stringstream
、CString
等类。
-
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代码的类。: -)
- 在c++中用vector填充一个简单的动态数组
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的简单if-else语句是如何无法访问的代码
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 一种在C++中读取TXT配置文件的简单方法
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 显示错误输出的简单数组排序程序
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 退出简单while循环时出现问题
- 为什么简单的算术减法在"if"条件下不起作用?
- C++-字符串是否包含一个带有简单循环的单词
- 关于 c++ 函数中指针赋值的简单问题
- 从函数返回任意简单类型的数据
- 如何在没有函数的情况下编写此代码并使C++更简单?
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 如何使用 samtools C API 构建一个简单的主.cpp文件
- C++ 创建一个简单的LPWSTR数组