c++如何拼接两个tchar字符串?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++如何拼接两个tchar字符串?相关的知识,希望对你有一定的参考价值。
如:
设:
TCHAR* a="我们abc";
TCHAR* b="你们bcd";
求:
TCHAR* c="我们abc你们bcd";
最后结果必须是Tchar,而不是什么string和Cstring
可以使用strcat();函数,具体例子:
tcsrchr(str, L\'\\\\\') 反向搜索获得最后一个TCHAR的位置
stprintf(TCHAR *buffer,const TCHAR *format [,argument] ..)获得一个格式化字符串
tcsdup 给一个指针分配源字符串大小的内存并从源字符串copy值
tcstok 按标记将字符串拆分
tcscpy 拷贝字符串. 参考技术A TCHAR* a=_T("我们abc");
TCHAR* b=_T("你们bcd");
int len_a = lstrlen(a);
int len_b=lstrlen(b);
TCHAR* c = new TCHAR[len_a+len_b+1];
c[0]=_T('\0');
lstrcat(c, a);
lstrcat(c,b);
// ...
// after using c, free the memory
delete []c;
当采用ANSI编译时,TCHAR就是char
当采用Unicode编译时,TCHAR就是w_char本回答被提问者和网友采纳
如何将使用 tchar.h 处理 unicode 的 Windows C++ 移植到 iOS 应用程序
【中文标题】如何将使用 tchar.h 处理 unicode 的 Windows C++ 移植到 iOS 应用程序【英文标题】:How to port Windows C++ that handles unicode with tchar.h to iOS app 【发布时间】:2017-08-09 17:02:47 【问题描述】:我有一些需要集成到 iOS 应用程序中的 c++ 代码。 windows c++ 代码使用 tchar.h 处理 unicode。我为 iOS 做了以下定义:
#include <wchar.h>
#define _T(x) x
#define TCHAR char
#define _tremove unlink
#define _stprintf sprintf
#define _sntprintf vsnprintf
#define _tcsncpy wcsncpy
#define _tcscpy wcscpy
#define _tcscmp wcscmp
#define _tcsrchr wcsrchr
#define _tfopen fopen
在尝试构建应用程序时,其中许多参数要么丢失(例如 wcscpy),要么参数错误。负责 c++ 代码的编码人员说我应该使用 char 而不是 wchar,所以我将 TCHAR 定义为 char。有没有人知道这应该怎么做?
【问题讨论】:
【参考方案1】:TCHAR
(仅供参考,在 C 运行时是 _TCHAR
,TCHAR
用于 Win32 API)是允许代码在编译时在 char
或 wchar_t
API 之间切换时间,但是您的定义将它们混合在一起。 wcs
函数用于 wchar_t
,因此您需要将这些定义更改为 char
对应项,以匹配您的其他基于 char
的定义:
#define _tcsncpy strncpy
#define _tcscpy strcpy
#define _tcscmp strcmp
#define _tcsrchr strrchr
另外,您将_sntprintf
映射到错误的C 函数。需要映射到snprintf()
而不是vsnprintf()
:
#define _sntprintf snprintf
snprintf()
和 vsnprintf()
的声明方式非常不同:
int snprintf ( char * s, size_t n, const char * format, ... );
int vsnprintf (char * s, size_t n, const char * format, va_list arg );
这可能是您收到“错误参数”错误的原因。
【讨论】:
太棒了!仍然缺少#define _sntprintf vsnprintf 并且包括wchar.h 大概是没有必要的? 您将_sntprintf
映射到错误的函数。我更新了我的答案。
好的。现在我在以下行中得到“没有对 snprintf 的匹配函数调用”:_sntprintf( m_sErr, sizeof(m_sErr)/sizeof(m_sErr[0]), L"Tiedoston %s avaaminen ep\xE4onnistui.", pFileNimi );
在第三个参数中将L"..."
更改为_T("...")
。您正在传递 wchar_t*
,其中预期 char*
。并确保 pFileNimi
是基于 TCHAR
而不是基于 wchar_t
,因此它与函数 _sntprintf
映射到的正确字符类型相匹配。
所以我可能必须为更改的行添加#ifdef macOS?以上是关于c++如何拼接两个tchar字符串?的主要内容,如果未能解决你的问题,请参考以下文章