Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wcscpy不接受目标变量中的TCHAR_C_Copy_Tchar_Wchar - Fatal编程技术网

wcscpy不接受目标变量中的TCHAR

wcscpy不接受目标变量中的TCHAR,c,copy,tchar,wchar,C,Copy,Tchar,Wchar,[VS10]目的是将驱动器文本字符串复制到*.dst中 TCHAR *driveIDBase; ... wcscpy_s (driveIDBase, MAX_PATH-3, L"\\\\?\\C:\\*"); 这会产生错误 IntelliSense:没有重载函数wcscpy_的匹配实例 参数列表 请注意,ANSI版本运行良好: strcpy_s (driveIDBase, MAX_PATH-3, "C:\\*"); 假设我们尝试显而易见的解决方法: strcpy\u s driveIDBas

[VS10]目的是将驱动器文本字符串复制到*.dst中

TCHAR *driveIDBase;
...
wcscpy_s (driveIDBase, MAX_PATH-3, L"\\\\?\\C:\\*");
这会产生错误

IntelliSense:没有重载函数wcscpy_的匹配实例 参数列表

请注意,ANSI版本运行良好:

strcpy_s (driveIDBase, MAX_PATH-3, "C:\\*");
假设我们尝试显而易见的解决方法:

strcpy\u s driveIDBase,最大路径3,\\?\C:\

我们能称cast wchar_t*driveIDBase可靠吗?也就是说,WIN32\u FIND\u DATAW将把该字符串解释为C:\

这句话是什么意思

\\?\前缀关闭路径字符串的自动扩展


值得注意的是TCHAR的堆栈溢出定义:

char或wchar\t的定义,用于移植古老的窗口 应用程序

正在组装的代码不是一个古老的端口,尽管将其包括在当前项目中的最初原因是,为了在某些API函数中进行转换,建议在较旧的线程中使用它。 由于MBCS的逐步淘汰,正如Bo所建议的那样,现在最好使用Unicode构建项目,这使得TCHAR宏的使用变得多余。 至于问题的第二部分,假设这样创建了一个宽char目录:

%USERPROFILE%\This Is A SubDirectory of %USERPROFILE% Not C-Colon-Backslash-Users-Backslash-MyUserName-- Being the Expanded Directory Path We Intended to Use
我们注意到,在\\?\下,给定的子目录不会在C:\Users\MyUserName中创建。事实上,它在大多数情况下都不能,因为C:\Users在第一个实例中永远不会使用\\?\前缀创建

以另一个问题结束回答的这一部分:关于MSDN中同一页的另一个声明,其中声明:

32767个字符的最大路径是近似值,因为 \\?\prefix可由系统在运行时扩展为更长的字符串 时间,这个展开式适用于总长度


运行时的扩展不是自动的吗?

对我来说很好。TCHAR取决于项目中的角色集选择。设置为Unicode吗?@Bo它是MBCS。嘿,更改为Unicode会在代码中出现大量不兼容的类型错误-我想看看这个。这里有2015年的ISO。值得一试吗?VS2015不会改变任何事情。TCHAR是char或wchar\t,具体取决于该设置。如果你编写了新软件,你可以直接使用wchar\u t并跳过TCHAR内容。这是为了简化Windows95和WindowsNT的代码编写。我们现在做得不多。