【问题标题】:How to replace character in TCHAR string如何替换 TCHAR 字符串中的字符
【发布时间】:2013-11-24 04:35:55
【问题描述】:

我有一个包含路径的 TCHAR 字符串。我需要将路径中所有出现的/ 替换为\。保存路径的变量定义如下:

TCHAR mypath[1024];

如果mypath 包含C:/new/newfile/a.txt,那么我需要将/ 替换为\,以便生成的字符串变为C:\new\newfile\a.txt

另外,我需要适配的文件已经有UNICODE定义如下:

#ifndef UNICODE
#define UNICODE
#endif

wcsncmp 这样的函数已被用于字符串比较。如何在 TCHAR 字符串中实现字符替换?

【问题讨论】:

  • 为什么首先使用TCHAR[]?坚持使用std::wstring 并使用std::replace
  • 是的,现在 TCHAR 已经过时了。在现代 C++ 程序中没有理由这样做。
  • @john 我没有看到任何地方指定这是一个现代 C++ 程序。也许他正在维护一个旧程序。

标签: c++ visual-c++ wchar-t wchar tchar


【解决方案1】:

试试下面的代码:

TCHAR *pCH = mypath;
while ( ( pCH = _tcschr( pCH, _T('/') ) ) != NULL )
{
    *pCH = _T('\\');
}

【讨论】:

  • 请注意_T() 会生成一个字符串。如果你想正确地换行,那么你应该使用_TCHAR()TCHAR()
  • @honk 好吧,在我的系统上_T() 被定义为#define _T(x) __T(x),它被定义为#define __T(x) x#define __T(x) L ## x,这取决于您的项目中是否定义了UNICODEL"ABC" 是一个字符串,但L'x' 是一个(宽)字符,但宏 _T() 可以用于这两种情况。
  • 你是对的,你的代码是完全有效的。我想我的评论是由我个人的编码偏好所引导的,我尽量做到明确。打扰了!
【解决方案2】:

Windows 操作系统中的路径最多为 260 个字符。所以,我认为其中一种方法是蛮力查找/替换。

#include <stdlib.h>
TCHAR myPath[_MAX_PATH];

for (int i=0; i<_MAX_PATH && myPath[i]; i++)
{
    if (myPath[i] == '/')
       myPath[i] = '\\';
}

【讨论】:

  • 是的,MAX_PATH 可以替换为 _MAX_PATH,替换为 #include 。谢谢。
  • 我指的是它指出路径实际上最多可以包含 32768 个字符的部分。
  • 我看到了,“Windows 2000、Windows XP Home Edition、Windows XP Professional、Windows Server 2003、Windows Server 2003 和 Windows Vista NTFS 文件系统支持最长 32768 个字符的路径,但仅使用 Unicode API 时”。但是当我查看VS 2010中_MAX_PATH的定义时,我只看到#define _MAX_PATH 260
  • 这是stdlib.h中的一部分,#define _MAX_PATH 260 /* max.完整路径名的长度 /#define _MAX_DRIVE 3 / 最大。驱动组件长度/#define _MAX_DIR 256/ max.路径组件的长度 /#define _MAX_FNAME 256 / max.文件名组件的长度 / #define _MAX_EXT 256 / max.扩展组件的长度 */
  • 你真的应该检查字符串的结尾(终止空字符):myPath[i] &amp;&amp; i &lt; _MAX_PATH
猜你喜欢
  • 2022-01-03
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多