_splitpath_s()参数类型不符合

1.下面代码在多字节环境下是可以正常运行的
	char drive[_MAX_DRIVE];
	char dir[_MAX_DIR];
	char fname[_MAX_FNAME];
	char ext[_MAX_EXT];
	
	CString lpszPathName = FileDlg.GetNextPathName(pos);
	_splitpath_s(lpszPathName , drive, _MAX_DRIVE,dir, _MAX_DIR, fname, _MAX_FNAME, ext, _MAX_EXT);

2.在unicode环境下
_splitpath_s()会报错,lpszPathName 类型不符合
这是因为在多字节环境下CString是窄字符,通常是基于char*和charde
在unicode环境下CString是宽字符,通常是基于wchar_t * 或者 std::wstring来表示
_splitpath_s函数接收的是窄字符,所以才会报错,只需要将lpszPathName 改成窄字符即可

3.转换方法(在unicode下)

//宽字符转为窄字符
CString lpszPathName = FileDlg.GetNextPathName(pos);
int nLen = lpszPathName.GetLength() + 1; // 加1 为键入结束符号 '\0'
char* lpszMultiByte = new char[nLen];
WideCharToMultiByte(CP_UTF8, 0, lpszPathName.GetBuffer(), -1, lpszMultiByte, nLen, NULL, NULL);
_splitpath_s(lpszMultiByte, drive, _MAX_DRIVE,dir, _MAX_DIR, fname, _MAX_FNAME, ext, _MAX_EXT);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`_splitpath` 是一个 C/C++ 标准库函数,用于将文件路径分解成文件名、目录路径和文件扩展名等部分。它的原型定义如下: ```c++ void _splitpath( const char * path, char * drive, char * dir, char * fname, char * ext ); ``` 参数说明: - `path`:要分解的文件路径。 - `drive`:指向存储驱动器号的缓冲区的指针。如果路径中没有驱动器号,则此参数返回空字符串。 - `dir`:指向存储目录路径的缓冲区的指针。如果路径中没有目录,则此参数返回空字符串。 - `fname`:指向存储文件名的缓冲区的指针。如果路径中没有文件名,则此参数返回空字符串。 - `ext`:指向存储文件扩展名的缓冲区的指针。如果路径中没有扩展名,则此参数返回空字符串。 `_splitpath` 函数分解路径的方式与操作系统有关,Windows 系统下的路径分解方式如下: - 路径以驱动器号开头,则将驱动器号分配给 `drive` 参数,`dir` 参数包含路径中的所有目录,但不包括驱动器号。 - 路径不以驱动器号开头,但以斜杠或反斜杠字符开头,则将根目录分配给 `dir` 参数,`drive` 参数为空字符串。 - 如果路径中有文件名,则 `_splitpath` 函数将文件名分配给 `fname` 参数,如果还有扩展名,则将扩展名分配给 `ext` 参数。 下面是一个使用 `_splitpath` 函数的示例: ```c++ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <io.h> void print_path_parts(const char* path) { char drive[_MAX_DRIVE]; char dir[_MAX_DIR]; char fname[_MAX_FNAME]; char ext[_MAX_EXT]; _splitpath(path, drive, dir, fname, ext); printf("Drive: %s\n", drive); printf("Dir: %s\n", dir); printf("Filename: %s\n", fname); printf("Extension: %s\n", ext); } int main() { const char* path = "C:\\Program Files\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.29.30133\\bin\\Hostx64\\x64\\cl.exe"; print_path_parts(path); return 0; } ``` 输出结果如下: ``` Drive: C: Dir: \Program Files\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\ Filename: cl Extension: .exe ``` 可以看到,该程序将路径分解成了驱动器号、目录路径、文件名和文件扩展名四部分,分别存储在 `drive`、`dir`、`fname` 和 `ext` 变量中,并打印输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值