首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串联tchar变量

串联tchar变量
EN

Stack Overflow用户
提问于 2015-01-16 16:28:29
回答 1查看 234关注 0票数 0

我使用WinAPI,我有一个函数get_disk_drives()用于检索可用的磁盘驱动器,还有一个辅助函数get_current_disk_drive()用于检索指定文件的完整路径和文件名。

代码语言:javascript
复制
void get_current_disk_drive(TCHAR dirname[]) {
  TCHAR *fileExt = NULL;
  TCHAR szDir[MAX_PATH];
  GetFullPathName(dirname, MAX_PATH, szDir, &fileExt);
  _tprintf(_T("Full path: %s \nFilename: %s\n"), szDir, fileExt);
}


void get_disk_drives() {
  DWORD drives_bitmask = GetLogicalDrives();

  for (int i = 0; i < 26; i++) {
    if ((drives_bitmask >> i) & 1) {
      TCHAR drive_name = (char)(65 + i);
      TCHAR drive_path[] = drive_name + "\\";
      get_current_disk_drive(drive_path);
    }
  }
}

int _tmain(int argc, _TCHAR* argv[]) {
  get_disk_drives();
  return 0;
}

在这里我不能进行连接:

代码语言:javascript
复制
TCHAR drive_name = (char)(65 + i);
TCHAR drive_path[] = drive_name + "\\";
get_current_disk_drive(drive_path);

为什么?我的错误在哪里?

EN

回答 1

Stack Overflow用户

发布于 2015-01-16 17:06:37

operator+不能用于C字符串、字符串文字或字符。其效果(至少对合法表达式而言)是指针算术。对于串联,您必须显式调用其中一个strcat函数,或者改用std::basic_string

代码语言:javascript
复制
typedef std::basic_string<TCHAR> tstring;

tstring drive_name;
drive_name += TCHAR( 65 + i );
tstring drive_path = drive_name + _T( '\\' );

您可以通过调用其c_str()成员从std::basic_string访问C字符串。由于这是一个表示为指针的C字符串,因此您必须将get_current_disk_drive的签名更改为void get_current_disk_drive(const TCHAR* dirname),或者传递一个const tstring&

停止使用Code::块也是一个好主意。2015年默认使用MBCS字符编码是一种犯罪行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27979873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档