取字符数组的最后四个字符

时间:2012-08-03 06:34:43

标签: c++ visual-c++

我有

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,怎么做?

由于

3 个答案:

答案 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)]

希望这有帮助。