标签: tchar

如何将TCHAR数组转换为std :: string?

如何将TCHAR数组转换为std::string(不是std::basic_string)?

c++ windows string unicode tchar

27
推荐指数
4
解决办法
6万
查看次数

linux上的tchar.h

我正在尝试编写跨平台的i18n C++代码.由于大多数linux系统更喜欢使用UTF-8作为字符编码,我认为我应该在Linux上使用string,在Windows上使用wstring.Linux上有tchar.h吗?什么是Linux上的tchar.h的等效替换?

c++ linux tchar internationalization

19
推荐指数
1
解决办法
4万
查看次数

在C++中将TCHAR转换为字符串

我正在尝试将TCHAR转换为字符串,如下所示:

std::string mypath;
TCHAR path[MAX_PATH];
GetModuleFileName( NULL, path, MAX_PATH );
Run Code Online (Sandbox Code Playgroud)

我需要设置mypath到的path.我做了一个简单的循环并连接path[index]到了mypath,这有效,但我不喜欢这种方式.

我是C++的新手,但已经做了很多C#.我已经看过GetModuleFileName传入"char"的例子,但它不喜欢它.它需要TCHAR或者a LPWSTR.

c++ tchar

19
推荐指数
4
解决办法
7万
查看次数

在C/C++(ms)中将char []转换为/从tchar []的最简单方法是什么?

这似乎是一个非常柔软的问题,但我总是很难查找这个函数,因为似乎有很多关于char和tchar的引用的变化.

c c++ string char tchar

18
推荐指数
3
解决办法
5万
查看次数

如何为TCHAR数组赋值

TCHAR我的C++代码中有一个数组,我想为它分配静态字符串.

我通过它设置了一个初始字符串

TCHAR myVariable[260] = TEXT("initial value");
Run Code Online (Sandbox Code Playgroud)

这一切都很好.但是,当我将它分成两行时,如同

TCHAR myVariable[260];
myVariable = TEXT("initial value");
Run Code Online (Sandbox Code Playgroud)

它会出错并给出编译器错误:

错误C2440:'=':无法从'const char [14]'转换为'TCHAR [260]'

TEXT()功能不应该完全符合我的要求吗?将给定的字符串转换为TCHARs?将两条线放在一起时,为什么会起作用?为了让它工作,我需要改变什么?

我遇到的其他一些令人困惑的事情:

我搜索了它的互联网和已经看到,也有_T()_TEXT()__T()__TEXT().它们适用于什么?我应该在什么环境中使用哪一个?

c++ tchar

16
推荐指数
1
解决办法
4万
查看次数

10
推荐指数
2
解决办法
3万
查看次数

9
推荐指数
2
解决办法
2万
查看次数

将堆栈字符串与堆字符串连接会产生奇怪的结果

我确信以下有一个合理的解释,但我有点困惑.

问题在于创建a _TCHAR[CONSTANT],a _TCHAR*,连接它们并返回结果的函数.

由于某种原因,whatTheHeck()来自_tmain()回归的胡言乱语.

_TCHAR* whatTheHeck(_TCHAR* name) {
    _TCHAR Buffer[BUFSIZE];
    DWORD dwRet;
    dwRet = GetCurrentDirectory(BUFSIZE, Buffer);
    _TCHAR* what = new _TCHAR[BUFSIZE];
    what = _tcscat(Buffer, TEXT("\\"));
    what = _tcscat(what, name);
    return what;
}

int _tmain(int argc, _TCHAR* argv[]) {

    _TCHAR* failure = whatTheHeck(TEXT("gibberish);")); // not again ..
    _tprintf(TEXT("|--> %s\n"), failure);

    _TCHAR* success = createFileName(TEXT("readme.txt")); // much better
    _tprintf(TEXT("|--> %s\n"), success);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

相反,当与堆一起工作时,按预期工作.

_TCHAR* createFileName(_TCHAR* name) {
    _TCHAR* Buffer = new _TCHAR[BUFSIZE];
    DWORD …
Run Code Online (Sandbox Code Playgroud)

c++ windows string memory-management tchar

9
推荐指数
1
解决办法
2627
查看次数

使用C++可变长度args时如何从_TCHAR*转换为char*?

我们需要将一个格式_TCHAR*字符串和一些char*字符串传递给一个带有可变长度args的函数:

inline void FooBar(const _TCHAR *szFmt, const char *cArgs, ...) {
  //...
}
Run Code Online (Sandbox Code Playgroud)

所以它可以这样调用:

char *foo = "foo";
char *bar = "bar";
LogToFileA(_T("Test %s %s"), foo, bar);
Run Code Online (Sandbox Code Playgroud)

显然,一个简单的解决方法是使用_TCHAR而不是char,但遗憾的是我们并没有那么奢侈.

我们需要将它与va_start等一起使用,以便我们可以格式化一个字符串:

va_list args;
_TCHAR szBuf[BUFFER_MED_SIZE];

va_start(args, cArgs);
_vstprintf_s(szBuf, BUFFER_MED_SIZE, szFmt, args);
va_end(args);
Run Code Online (Sandbox Code Playgroud)

不幸的是我们不能使用它,因为它给了我们这个错误:

Unhandled exception at 0x6a0d7f4f (msvcr90d.dll) in foobar.exe:
0xC0000005: Access violation reading location 0x2d86fead.
Run Code Online (Sandbox Code Playgroud)

我想我们需要将我们的char*转换为_TCHAR* - 但是如何?

c++ char tchar

8
推荐指数
1
解决办法
2万
查看次数

我应该从Windows代码中删除TCHAR吗?

我正在修改一些非常古老的(10年)C代码.该代码在Unix/Mac上使用GCC进行编译,并使用MinGW对Windows进行交叉编译.目前整个都有TCHAR字符串.我想摆脱TCHAR并使用C++字符串代替.是否仍然需要使用Windows范围的功能,或者我现在可以使用Unicode和UTF-8完成所有操作吗?

c unicode winapi utf-8 tchar

8
推荐指数
1
解决办法
2413
查看次数