有人可以告诉我这段代码的问题吗?
我正在建立Windows应用程序,而不是控制台。我在使用功能吗
正确地。我应该使用什么类型?好吧,我修复了分号错误和
否则会出错吗?仍然无法正常工作。
#include <windows.h>
int WINAPI WinMain(HINSTANCE thisin,HINSTANCE previn,LPSTR lpstr,INT int_)
{
LPTSTR buffer;
DWORD size;
SetConsoleTitle("Console Title");
if(!GetConsoleTitle(buffer,size))
cout << "error" << endl;
else cout << *buffer << endl;
system("Pause");
return 0;
}
最佳答案
它有两个问题,第一个是“;”最后,如果那是C ++混淆错误,并且每个人都说出来,但是第二个是:对于每个获得缓冲区以返回某些内容的API,您都应该提供一个有效的缓冲区。假设GetConsoleTitle
实现为:
BOOL GetConsoleTitle(LPTSTR p, DWORD dwSize)
{
LPTSTR actualTitle = /* Get actual title from somewhere */;
while (dwSize--)
{
*p++ = *actualTitle++;
if (!*p++) return TRUE;
}
// Not enough buffer
return FALSE;
}
现在查看您的程序,将未初始化的
LPTSTR
传递给函数,并且一旦API调用*p++ = *actualTitle++
,它将导致分段错误或Access violation
。因此,为了解决该问题,您必须传递一个有效的缓冲区作为第一个参数,并且由于
LPTSTR
是TCHAR*
的typedef,因此您应该具有:const DWORD dwSize = 128;
TCHAR buffer[dwSize];
if (GetConsoleTitle(buffer, dwSize)) std::cout << "OK!" << std::endl;
关于c++ - Windows编程的新手,遇到一段代码块的麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15256120/