在TCHAR**中查找TCHAR*的个数.如何去做
Finding the number of TCHAR* in TCHAR** . How?
我遇到了一个很有挑战性的案子。我有一个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);
相关文章:
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 我想做一个彼此不同但重复出现的数字
- Python中的for循环与C++有何不同
- 检查TCHAR数组输入是否为带符号整数C++
- 我可以做些什么来消除或最小化这种将提供相同功能和行为的代码重复
- 不能将 "void *" 类型的值分配给类型 "TCHAR" 的实体
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 当我们为(;;) 写作时,它做了什么?for 循环中的双分号有什么作用?
- C++:去引用实际上在做什么
- 在TCHAR**中查找TCHAR*的个数.如何去做
- 析构函数之前可以工作.如何去做
- 是否有可能将通用队列从c++传递到vb.net?如何去做
- 可能使一个单例结构在c++ ?如何去做
- 指针值超过可用内存?如何去做