在这里我遇到了一个具有挑战性的案例..我有一个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作为结果)..但是有没有办法获得字符串的数量?
答案 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);