Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.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
C++ 如何将路径存储在这种结构中,以及如何将其转换为其他内容?_C++_C_String_Winapi_Type Conversion - Fatal编程技术网

C++ 如何将路径存储在这种结构中,以及如何将其转换为其他内容?

C++ 如何将路径存储在这种结构中,以及如何将其转换为其他内容?,c++,c,string,winapi,type-conversion,C++,C,String,Winapi,Type Conversion,我正在看密码。我想添加一些选项,以便将文件删除到回收站,而不是永久删除 我遇到的第一个问题是路径的存储方式—作为字节[1]类型。我认为它可能是指向实际路径的指针,但如果它只是一个字节,则可能不是。完整结构见下文: struct MoveObj { _int64 fileID; _int64 fileSize; enum Status { START, DONE, ERR } status; DWORD dwFileAt

我正在看密码。我想添加一些选项,以便将文件删除到回收站,而不是永久删除

我遇到的第一个问题是路径的存储方式—作为
字节[1]
类型。我认为它可能是指向实际路径的指针,但如果它只是一个字节,则可能不是。完整结构见下文:

struct MoveObj {
    _int64      fileID;
    _int64      fileSize;
    enum        Status { START, DONE, ERR } status;
    DWORD       dwFileAttributes;
    BYTE        path[1];
};
知道这是什么意思吗


我的第二个问题是,我需要将这个字符串转换成一种叫做“PCZZTSTR”的可怕的MS类型,这样它就可以与。有什么建议我可以做这个转换吗?

struct
末尾的单元素数组
path[1]
只是一个实现可变大小结构的通用C技巧。在C99标准之前,C语言中不允许使用可变大小的结构,因此程序员以这种方式实现它

存储路径的字节序列从该数组的第一个元素开始(
path[0]
),但为该结构分配的内存多于
sizeof(MoveObj)
,因此数组本身的长度超过一个字节。如果数组的长度没有存储在结构中,我猜它是以零结尾的

PCZZTSTR听起来可能很吓人,但本质上它只是一个简单的C样式字符串,由
TCHAR
s组成,以两个
'\0'
字符结尾。P(指向a的指针)、CZ(C样式,以零结尾)、Z(双重以零结尾)、T()、STR(字符串)


您必须将
path
中的字节转换为
TCHAR
s(在较旧的平台中是普通的
char
s,在现代的基于Unicode的窗口中是
WCHAR
s),在字符串的末尾再加一个
\0
,然后您就可以随意猜测
PCZZTSTR
路径[1]变量的使用方法如所述(见接受答案)?可能重复的