【发布时间】:2013-11-02 16:56:30
【问题描述】:
我有这样的代码
wstring filename;
wstring dirname;
wstring disk;
然后我想用这种方式分割文件的完整路径
_wsplitpath(&filepath[0],&disk[0],&dirname[0],NULL,NULL);
但我有一个例外。我做错了什么?
【问题讨论】:
我有这样的代码
wstring filename;
wstring dirname;
wstring disk;
然后我想用这种方式分割文件的完整路径
_wsplitpath(&filepath[0],&disk[0],&dirname[0],NULL,NULL);
但我有一个例外。我做错了什么?
【问题讨论】:
使用_wsplitpath_s 防止缓冲区溢出。还可以使用返回指向可变字符的指针并使用大小初始化它们的向量:
std::wstring filename;
std::vector<wchar_t> disk(8);
std::vector<wchar_t> dirname(1024);
_wsplitpath_s(
filename.c_str(),
disk.data(), disk.size(),
dirname.data(), dirname.size(),
nullptr, 0,
nullptr, 0
);
【讨论】:
filename.c_str() 返回的结果与 &filename[0] 完全相同,只是它是 CharT const* 而不是 CharT*(这在此处无关紧要)。
c_str() 代表“C 字符串”——即以空字符结尾。不是“字符字符串”。它适用于wstring。
std::wstring 是 std::basic_string<wchar_t> 的别名。见en.cppreference.com/w/cpp/string/basic_string。