2013-07-22 171 views
3

你好,我试图创建一个程序路径并放入注册表文件,但我一直有一个错误。下面是代码:从char *到unsigned char的C++转换?

#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 ); 
}; 

我得到的错误说

从 '字符*' 到 '无符号的字符'[-fpermissive]

我花了无效的转换几小时寻找解决方案,但我找不到一个解决方案。

回答

2

的问题,我猜,是此行

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

这里的问题是,您尝试创建的单字符数组与字符指针。

您只能将该变量用作RegSetValueEx调用的临时对象,因此您并不需要它。而是直接使用buffer来调用该函数。

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

像:

::RegSetValueEx(Handle_Key, "My Directory", 0, 1, 
       reinterpret_cast<unsigned char*>(buffer), 
       strlen(buffer)); 
+0

'static_cast'?我得到错误消息,说明类型'char [260]'无效的static_cast类型'unsigned char *''。 – johnchen902

+0

@ johnchen902更新了我的答案,使用'reinterpret_cast'。 –

+0

哦,我的上帝,它的作品!非常感谢! – user2606398