wcscpy不接受目标变量中的TCHAR

时间:2015-09-12 15:55:20

标签: c copy tchar wchar

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

TCHAR *driveIDBase;
...
wcscpy_s (driveIDBase, MAX_PATH-3, L"\\\\?\\C:\\*");

这会产生错误

  

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

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

strcpy_s (driveIDBase, MAX_PATH-3, "C:\\*");

假设我们尝试了明显的解决方法:

strcpy_s(driveIDBase,MAX_PATH-3,“\\?\ C:\”);

我们可以调用强制转换(wchar_t *)driveIDBase 吗?也就是说,WIN32_FIND_DATAW会将该字符串解释为“C:\”?

这句引自MSDN的意思是什么?

  

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

1 个答案:

答案 0 :(得分:0)

值得注意的是TCHAR的Stack Overflow定义:

  

char或wchar_t的#define,用于移植古代窗口   应用

正在组装的代码不是一个古老的端口,尽管将其包含在当前项目中的最初原因是,为了在某些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:\用户永远不会在第一个实例中使用\\?\前缀创建。

用另一个问题总结答案的这一部分:
关于MSDN中同一页面的另一个陈述:

  

最大路径为32,767个字符是近似值,因为   " \\ \&#34?;系统在运行时可以将前缀扩展为更长的字符串   时间,这种扩展适用于总长度,

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