我有
TCHAR szPIDKEY[255];//for product id
DWORD dwLen = sizeof(szPIDKEY)/sizeof(szPIDKEY[0]); //calculating the size of the key
UINT res = MsiGetProperty(hInstall, _T("PIDKEY"), szPIDKEY, &dwLen);
if(res != ERROR_SUCCESS)
{
//fail the installation
return 1;
}
密钥字符串看起来像xxxx-xxxx-xxxx-xxxx,我想只拿TCHAR中的最后四个xxxx,怎么做?
由于
答案 0 :(得分:2)
#ifndef UNICODE
typedef std::string String
#else
typedef std::wstring String
#endif
String szKey = szPIDKEY;
size_t found = szKey.find_last_of("-");
String szFind = szKey.substr (found,4);
答案 1 :(得分:0)
这真的很难吗?
TCHAR lastFour[5] /* 4 + 1 for null terminator */
_tcscpy(lastFour, szPIDKEY + dwLen - 4); /* copy the last four characters and
null terminator */
如果你想用C语言编写字符串,那么你将不得不学习如何像上面那样进行指针操作。 szPIDKEY
是一个数组,但它也作为指向数组第一个元素的指针,szPIDKEY + dwLen
是指向键的最后一个字符(空终止符)的指针。所以szPIDKEY + dwLen - 4
是指向此前四个字符的指针。
未经测试的代码。
答案 2 :(得分:0)
如果没有定义UNICODE,则TCHAR只是一个char,如果定义了,则为wchar。因此,如果您想采用最后4个符号,您可能会对待这些类型。
所以也许你应该这样做:
#ifdef UNICODE
#include <wchar.h>
int get_len(TCHAR[] val) {
return wcslen(val);
}
#else
#include <cstring>
int get_len(TCHAR[] val) {
return strlen(val);
}
#endif
编辑:事实上,在Windows中已经定义了一个功能,它完成了我上面描述的功能,它是_tcslen(感谢jajjaj这个)。但是我决定保留上面的代码,以便你了解它的作用。
然后使用上面的函数,您将最后4个字符存储在
中szPIDKEY [_tcslen(szPIDKEY-4)],... szPIDKEY [_tcslen(szPIDKEY-1)]
希望这有帮助。