2017-03-08 142 views
0

当试图使用WriteConsoleOutputCharacter函数时,应用程序崩溃。C++ WinAPI - WriteConsoleOutputCharacter崩溃控制台应用程序

COORD pos; 
pos.X = 0; 
pos.Y = 0; 

HANDLE buffer = GetStdHandle(STD_OUTPUT_HANDLE); 
LPDWORD written; 

char* str = "s"; 
WriteConsoleOutputCharacter(buffer, str, strlen(str), pos, written); 

但WriteConsole功能正常工作:

WriteConsole(buffer1,str,strlen(str),written,NULL); 

我没有得到任何错误,但Windows的“应用程序停止响应”通知,我不能使用调试器,因为IDE我正在使用(Dev C++ 5.11)已经失效了。

在此先感谢!

+0

'写的LPDWORD' - 当然是崩溃。你需要使用'DWORD write'和'WriteConsoleOutputCharacter(buffer,str,strlen(str),pos,&written);' – RbMm

回答

2

变量在哪里written指向?该函数将取消引用该参数以设置写入的字符数。如果该变量未初始化,则它将具有未定值值,并且看似指向随机位置,导致取消引用时导致未定义行为

而是使用普通DWORD,并使用地址的运营商&

DWORD written; 

WriteConsoleOutputCharacter(buffer, str, strlen(str), pos, &written); 
//              ^
//       Note the address-of operator here 

或者,如果你不感兴趣,有多少个字符写入,通过nullptr代替。

+0

嗯,DWORD和LPDWORD有什么区别?指向LPDWORD变量导致此错误 - 无法将'DWORD ** {aka long unsigned int **}'转换为'LPDWORD {aka long unsigned int *}' - 。相反,指向DWORD变量正常工作。谢谢! –

+0

@SimoneBondi'LPDWORD'是'long *'的宏。所以,如果你写了'LPDWORD','你基本上'写'长''。 'P'代表*指针*。 –