在TCHAR找到TCHAR *的数量**。怎么样?

时间:2014-08-05 13:24:38

标签: c++ arrays pointers multidimensional-array

在这里我遇到了一个具有挑战性的案例..我有一个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个字符串)..如何获得元素的确切数量.. ??

如果是我可以通过

知道的2D数组
 result = (sizeof(x)/sizeof(x[0]));

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

3 个答案:

答案 0 :(得分:0)

如果您只有一个指向其中一个项目的指针,则无法知道数组中有多少项。

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

有可能在您的代码中也可以对内存管理进行其他改进,因此几乎没有理由将new用于字符串。

答案 1 :(得分:0)

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

另外,整个TCHAR的事情真的吗?这些东西来自20年前。现在每个人都使用Unicode。

答案 2 :(得分:-1)

您可以使用NULL指针数组(纯C样式)或std :: vector。谈到NULL指针数组......

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);