C++ C++;从字符*到无符号字符的转换?

C++ C++;从字符*到无符号字符的转换?,c++,path,compiler-errors,registry,type-conversion,C++,Path,Compiler Errors,Registry,Type Conversion,您好,我正在尝试创建一个take-a程序路径并将其放入注册表文件中,但我一直有一个错误。代码如下: #include <iostream> #include <windows.h> #include <winuser.h> #include <tchar.h> #include <limits> using namespace std; void reg() { char buffer[MAX_PATH]; GetModul

您好,我正在尝试创建一个take-a程序路径并将其放入注册表文件中,但我一直有一个错误。代码如下:

#include <iostream> 
#include <windows.h> 
#include <winuser.h> 
#include <tchar.h>
#include <limits>

using namespace std;

void reg() {
char buffer[MAX_PATH];

GetModuleFileName(NULL,buffer,sizeof(buffer));

const unsigned char Path[ MAX_PATH ] = {buffer};

::HKEY Handle_Key = 0;

::RegSetValueEx( Handle_Key, "My Directory", 0, 1, Path, sizeof Path  );
};
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
void reg(){
字符缓冲区[最大路径];
GetModuleFileName(NULL,buffer,sizeof(buffer));
常量无符号字符路径[MAX_Path]={buffer};
::HKEY Handle_Key=0;
::RegSetValueEx(句柄_键,“我的目录”,0,1,Path,sizeof Path);
};
我得到的错误是

从“char*”到“unsigned char”[-fpermissive]的转换无效


我花了几个小时寻找解决方案,但我找不到。

我猜问题是这条线

const unsigned char Path[ MAX_PATH ] = {buffer};
这里的问题是,您试图使用字符指针创建单个字符的数组

您只将该变量用作
RegSetValueEx
调用的临时变量,因此实际上并不需要它。而是直接用
缓冲区
调用该函数

另外,您不应该在这里使用
sizeof
,因为这将把所有缓冲区都放在注册表中,而不仅仅是实际的字符串。使用
strlen

比如:

::RegSetValueEx(句柄键,“我的目录”,0,1,
重新解释(缓冲区),
斯特伦(缓冲区);

static\u cast
?我收到的错误消息是,
从类型“char[260]”到类型“unsigned char*”
@johnchen902更新了我的答案以使用
重新解释\u cast
::RegSetValueEx( Handle_Key, "My Directory", 0, 1,
                 reinterpret_cast<unsigned char*>(buffer),
                 strlen(buffer));