Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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_Pointers_Winapi_Lpcwstr_Lpbyte - Fatal编程技术网

在C(中文输出?)

在C(中文输出?),c,pointers,winapi,lpcwstr,lpbyte,C,Pointers,Winapi,Lpcwstr,Lpbyte,我正在做一个C项目,我遇到了一个问题。 程序读取一个字符串,该字符串由.php页面响应。它使用这个代码 要读取数据并将其指定给变量,该变量将被发送到Commands()函数,请执行以下操作: LPSTR szBuffer=(LPSTR)chunk+0x1000; DWORD dwRead; if (CWA(_HttpSendRequestA, wininet, hHttpRequest, szHeaders, lpstrlenA(szHeaders), szReq, lpstrlenA(szR

我正在做一个C项目,我遇到了一个问题。 程序读取一个字符串,该字符串由.php页面响应。它使用这个代码 要读取数据并将其指定给变量,该变量将被发送到Commands()函数,请执行以下操作:

LPSTR szBuffer=(LPSTR)chunk+0x1000;
DWORD dwRead;

if (CWA(_HttpSendRequestA, wininet, hHttpRequest, szHeaders, lpstrlenA(szHeaders), szReq, lpstrlenA(szReq)) != 0)
    {
        CWA(_InternetReadFileA, wininet, hHttpRequest, szBuffer, 0x400, &dwRead);
        if (dwRead)
            Commands((LPBYTE)szBuffer, dwRead);
    }
如您所见,数据被发送到Commands()函数,该函数接收LPBYTE szBuffer(函数中名为“command”)和DWORD dwRead(函数中名为“size”)

在Commands()函数中,它应该读取从.php页面读取的字符串。然而,由于数据似乎存储为LPBYTE,我做了很多事情试图将其转换为char*。然而,当我认为我最终得到它时,我尝试使用MessageBox输出它(看看它是否显示了它应该读取的字符串)。但是,这会返回中文字符(而原始字符串应为:

“TASKci=0C73CCFD206BD011E7087CE0806E6F6E69630,作业=dlex,ti=AD62A5950B76F3812C542C24040EACE9,pr=https,ur=//test.com/test.txt,cl=”

它返回给我的内容的屏幕截图:

Commands()中的代码的外观:

我是C语言的新手(我以前只写过C语言的东西),所以如果我问了一些愚蠢的问题,我很抱歉,我已经尽了最大的努力,但我自己似乎找不到任何解决办法

另外,请记住,除了
Commands()
函数中的内容之外,所有内容都不是由我编写的,而是由经验丰富的人编写的。这些代码应该很好,我确信它正在读取页面中的数据,可能只是我在某个地方搞砸了转换。

窄字符串(char*)当您在需要宽UTF-16 Unicode字符串的地方使用它时


您不能只是强制转换字符串来更改其类型,您需要调用。

什么是
LPSTR szBuffer=(LPSTR)chunk+0x1000
?您的意思是
char szBuffer[0x1000]={0}
?这些
CWA
函数是什么?看起来您的项目是Unicode,但您正在强制使用ANSI函数。您正在用
(LPTSTR)隐藏一些错误
cast。你应该使用WinAPI函数,例如
HttpSendRequest
。或者
HttpSendRequestA
,如果你想强制使用ANSI。你的代码包括很多宏、强制类型转换和非常规代码。
LPTSTR
和其他
T
宏可能会让初学者感到非常困惑,请尽量避免使用它们。请你对他们选择的字符编码更有经验。你需要知道如何使用
MultiByteToWideChar
正确地转换为宽字符串。同时确保阅读。你目前处理类型不匹配错误的方法似乎是欺骗编译器,即使a不是类型B,也将a转换为B。这永远不会奏效。你需要d尝试理解编译器错误。停止忽略它们。或者,如果源字符串使用ANSI编码(线程的当前代码页)或ASCII编码,则调用
MessageBoxA
,并让系统执行转换。
BOOL Commands(LPBYTE command, DWORD size) {

LPTSTR x = (LPTSTR)((char*)command);

{

        int msgboxID = MessageBox(
        NULL,
        x,
        (LPCWSTR)L"Woop",       
        MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2 );

}


CWA(Sleep, kernel32, 100);

return 1; }