c-函数调用中发生WriteConsole访问冲突,但不是来自main()

我试图在函数调用中使用WriteConsole(..),但遇到访问冲突.当我取消注释main中的代码时,它将我的文本打印到屏幕上,而main函数没有问题.当我尝试在函数调用中打印字符串时,即使确实将文本打印到控制台,也会出现访问冲突.

void print(char *_charArray);

int _tmain(int argc, _TCHAR* argv[])
{

    HWND hConsole;
//    HANDLE hFile;
    char myText[] = "This is my text";
    char *pMyText = myText;
    LPDWORD charsWriten;


//    hFile = CreateFile("CONOUT$", GENERIC_WRITE, FILE_SHARE_READ, NULL,
//        OPEN_EXISTING, 0, NULL);

    print(pMyText);

//    WriteConsole(hFile, myText, sizeof(myText), charsWriten, NULL);


    getch();
    return 0;
}

void print(char *text)
{
    LPDWORD charsWriten;
    HANDLE hFile;

    hFile = CreateFile("CONOUT$", GENERIC_READ | GENERIC_WRITE,
                    FILE_SHARE_WRITE | FILE_SHARE_READ, NULL,
                    OPEN_EXISTING, 0, NULL);

    unsigned int strn = strlen(text) + 1;

    if(!WriteConsole(hFile, text, (strlen(text) + 1), charsWriten,NULL))
    {
        printf("Write Failed\n");
    }
}
最佳答案
LPDWORD charsWriten;

LPDWORD是DWORD *.因此,您所拥有的是一个未初始化的指针.然后,您将此指针传递给WriteConsole,WriteConsole写入指向的无效位置.而是将charsWritten声明为DWORD类型,然后使用& charsWritten将其地址传递给WriteConsole.

DWORD charsWritten;
WriteConsole(hFile, text, (strlen(text) + 1), &charsWritten, NULL);

如您所说,如果它像您主要的那样工作.那简直是倒霉.这是不确定的行为,并不总是可以预期的结果.

转载注明原文:c-函数调用中发生WriteConsole访问冲突,但不是来自main() - 代码日志