在TCHAR**中查找TCHAR*的个数.如何去做

Finding the number of TCHAR* in TCHAR** . How?

本文关键字:TCHAR 何去做 查找      更新时间:2023-10-16

我遇到了一个很有挑战性的案子。我有一个c++代码如下

  TCHAR **x= NULL;
  x= new TCHAR*[3];
  x[0] = new TCHAR(_tcslen(_T("aaa")));
  x[1] = new TCHAR(_tcslen(_T("bbb")));
  x[2] = new TCHAR(_tcslen(_T("ccc")));
  _tcscpy(x[0],_T("aaa"));
  _tcscpy(x[1],_T("bbb"));
  _tcscpy(x[2],_T("ccc"));

我有3个值Tchars分配,但如果我不知道"x"包含的元素数量(可能是它有一些10个字符串)..我怎样才能得到元素的确切数量??

如果它是一个二维数组,我可以知道

 result = (sizeof(x)/sizeof(x[0]));

所以它会显示我的行数在它(如在示例中,我将得到3作为结果)..但是有没有办法得到字符串的个数呢?

如果你只有指向其中一个元素的指针,就无法知道数组中有多少元素。

您需要通过另一个变量或列表末尾的哨兵值来记住这些信息。最好包装在包含指针和知道如何查找长度的函数的单元中。

有可能在代码中也可以对内存管理进行其他改进,几乎没有理由对字符串使用new

使用std::vector<std::basic_string<TCHAR>>。这将自动保存字符串的计数,它们的长度,有多少,以及何时释放它们。在给定一个指向任意元素的指针之后,你无法知道任意数组中有多少项。

还有,整个TCHAR的事情,真的吗?那都是20年前的事了。现在大家都用Unicode了

您可以使用空指针数组(纯C风格)或std::vector。说到空指针数组…

TCHAR **x= NULL;
x= new TCHAR*[4];
x[0] = new TCHAR[_tcslen(_T("aaa"))+1];
x[1] = new TCHAR[_tcslen(_T("bbb"))+1];
x[2] = new TCHAR[_tcslen(_T("ccc"))+1];
x[3] = NULL;
_tcscpy(x[0],_T("aaa"));
_tcscpy(x[1],_T("bbb"));
_tcscpy(x[2],_T("ccc"));
int size=0;
TCHAR ** y = x;
while(*y++)  size ++;
printf("Array size is: %d", size);