sprintf一个LPCWSTRvariables

sprintf一个LPCWSTRvariables,第1张

概述sprintf一个LPCWSTRvariables

我试图deBUGging打印一个LPCWSTRstring,但我在缓冲区的sprintf推入过程中遇到问题,因为它只检索string中的第一个字符。

这里是代码:

HANDLE WINAPI hookedCreatefileW(LPCWSTR lpfilename,DWORD DWDesiredAccess,DWORD DWShareMode,LPSecurity_ATTRIBUTES lpSecurityAttributes,DWORD DWCreationdisposition,DWORD DWFlagsAndAttributes,HANDLE hTemplatefile) { char buffer[1024]; sprintf_s(buffer,1024,"CreatefileW: %s",lpfilename); OutputDeBUGString(buffer); return trueCreatefileW(lpfilename,DWDesiredAccess,DWShareMode,lpSecurityAttributes,DWFlagsAndAttributes,DWCreationdisposition,hTemplatefile); }

例如,我得到CreatefileW: C或CreatefileW: 。

我如何正确推入缓冲区?

帮助CredEnumerate

在第三方应用程序中模拟用户input

如何设置其他程序的任何可见窗口在顶部?

提取图像文件元数据

用Python 3打印LF到stdout

谢谢。

是否有可能确定哪个进程启动我的.Net应用程序?

如何阻止Enumwindows运行无限win32

如何在win32 c ++中打印预览?

可执行的gem – windows

托pipe的WMI事件类不是一个事件类?

使用swprintf_s ,这是为宽字符字符串设计的sprintf_s的版本。

你还需要一个wchar_t而不是char的数组,并使用OutputDeBUGStringW()

另外,请注意, swprintf_w可能不是您想调用的内容。 如果遇到一个比你给它大的字符串,它会执行某种断言。 我建议你具体测试这种情况。

你需要告诉sprintf()你传递一个宽字符的字符串。 使用%ls说明符:

sprintf_s(buffer,"CreatefileW: %ls",lpfilename);

请注意这是多么的无用。 您的代码在Unicode *** 作系统上运行。 它必须在将char []字符串发送给调试器之前将其转换为宽字符串。 这只是浪费了cpu周期,而且还有数据丢失的风险。 当你在罗马时,像罗马一样行事,使用wchar_t + wsprintf()。 #define UNICODE,这样你就可以自动调用OutputDeBUGStringW()这个快捷方式,不需要转换字符串。 使用C ++的要点是编写快速的代码,故意制作慢是毫无意义的。

除非你有一个具体的原因来把unicode作为这个函数的目标(而不是在整个项目中),否则尽可能使用字符集不可知的宏是明智的选择:

HANDLE WINAPI hookedCreatefile(LPCTSTR lpfilename,HANDLE hTemplatefile) { TCHAR buffer[1024]; _stprintf_s(buffer,_T("CreatefileW: %s"),lpfilename); OutputDeBUGString(buffer); return trueCreatefile(lpfilename,hTemplatefile); }

总结

以上是内存溢出为你收集整理的sprintf一个LPCWSTRvariables全部内容,希望文章能够帮你解决sprintf一个LPCWSTRvariables所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1244498.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存