给出以下代码:
#include <stdlib.h>
int _tmain(int argc, _TCHAR* argv[])
{
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAT_EXT];
_splitpath_s( argv[0], drive, dir, fname, ext);
// ...some more code...
}
编译器抛出以下错误:
错误2665:'_ splitpath_s'2个重载中没有一个可以转换所有参数类型
出了什么问题?我正在使用VS 2010 SP1。
提前多多感谢。
答案 0 :(得分:2)
如果_UNICODE
已定义,则_TCHAR
为wchar_t
,因此argv[0]
为wchar_t*
,无法转换为char const*
(这是_splitpath_s
的第一个参数的类型。
为简洁起见,Visual Studio中的错误列表仅显示每个错误的第一行。编译器的完整错误(可在“输出”窗口中找到)提供更多信息:
error C2665: '_splitpath_s' : none of the 2 overloads could convert all the argument types
[...]\stdlib.h(797): could be 'errno_t _splitpath_s<3,256,256,256>(const char *,char (&)[3],char (&)[256],char (&)[256],char (&)[256]) throw()'
while trying to match the argument list '(_TCHAR *, char [3], char [256], char [256], char [256])'
在完整错误中,很明显,可能不匹配的唯一参数是第一个,因为其他参数明显匹配。
如果您打算使用_TCHAR
,请在任何地方使用它和它的朋友。您的数组应该是_TCHAR
的数组,您应该使用_tsplitpath_s
。或者,根本不要使用_TCHAR
,只需在整个项目中使用窄字符或宽字符串(在Windows上,最好使用宽字符串)
答案 1 :(得分:1)
如果您使用的是C,那么
/* _splitpath(path_buffer, drive, dir, fname, ext); */
_splitpath_s(path_buffer, drive, _MAX_DRIVE, dir,
_MAX_DIR, fname, _MAX_FNAME, ext, _MAX_EXT);
如果使用C ++,如果您没有_tmain
用于_TCHAR
,drive
等,或者您应该使用dir
,则没有任何理由使用_tsplitpath_s
{1}}而是。或者将它们全部转换为ANSI或UNICODE。
答案 2 :(得分:0)
这对我有用:
$( "<span class='checkmark'></span>" ).insertAfter( ".layered_attrs[type='checkbox']" );