我使用WinAPI,我有一个函数get_disk_drives()用于检索可用的磁盘驱动器,还有一个辅助函数get_current_disk_drive()用于检索指定文件的完整路径和文件名。
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;
}在这里我不能进行连接:
TCHAR drive_name = (char)(65 + i);
TCHAR drive_path[] = drive_name + "\\";
get_current_disk_drive(drive_path);为什么?我的错误在哪里?
发布于 2015-01-16 17:06:37
operator+不能用于C字符串、字符串文字或字符。其效果(至少对合法表达式而言)是指针算术。对于串联,您必须显式调用其中一个strcat函数,或者改用std::basic_string:
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字符编码是一种犯罪行为。
https://stackoverflow.com/questions/27979873
复制相似问题