Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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
Visual c++ %llx或%llu不应该与wsprintf一起使用吗? 我使用Visual Studio 2017 C++。当我将printf与规范(如%llx或%llu)一起使用时,一切正常。如果我在wsprintf中使用相同的格式规范,%llu或%llx,我会在缓冲区中得到垃圾,而不是我在printf中得到的结果_Visual C++_Printf - Fatal编程技术网

Visual c++ %llx或%llu不应该与wsprintf一起使用吗? 我使用Visual Studio 2017 C++。当我将printf与规范(如%llx或%llu)一起使用时,一切正常。如果我在wsprintf中使用相同的格式规范,%llu或%llx,我会在缓冲区中得到垃圾,而不是我在printf中得到的结果

Visual c++ %llx或%llu不应该与wsprintf一起使用吗? 我使用Visual Studio 2017 C++。当我将printf与规范(如%llx或%llu)一起使用时,一切正常。如果我在wsprintf中使用相同的格式规范,%llu或%llx,我会在缓冲区中得到垃圾,而不是我在printf中得到的结果,visual-c++,printf,Visual C++,Printf,我的问题是:有没有办法让wsprintf给出使用%llx和/或%llu时应该得到的结果 下面是一个非常简单的控制台程序,它演示了printf和wsprintf的不同行为 #include "stdafx.h" #include <Windows.h> #include <inttypes.h> int main() { DWORD64 OffsetHWM = 0x7123456789012345; WCHAR BufferBytes[256] = { 0

我的问题是:有没有办法让wsprintf给出使用%llx和/或%llu时应该得到的结果

下面是一个非常简单的控制台程序,它演示了printf和wsprintf的不同行为

#include "stdafx.h"
#include <Windows.h>
#include <inttypes.h>


int main()
{
  DWORD64 OffsetHWM = 0x7123456789012345;

  WCHAR   BufferBytes[256] = { 0 };  // initialized - no junk in there

  // the wprintf below works as expected

  wprintf(L"from wprintf : %8llX\n", OffsetHWM);

  // this call to wsprintf isn't filling the buffer with the expected value

  wsprintf(BufferBytes, L"%8llX\n", OffsetHWM);
  wprintf(L"from wsprintf: %s\n", BufferBytes);    // prints junk

  wprintf(L"\n");                                  // just for neatness

  wsprintf(BufferBytes, L"%8" PRIx64 "\n", OffsetHWM);
  wprintf(L"from wsprintf: %s\n", BufferBytes);

  // this truncates (as expected) the value of OffsetHWM - not useful

  wsprintf(BufferBytes, L"%8lx\n", OffsetHWM);
  wprintf(L"from wsprintf: %s\n", BufferBytes);

  return 0;
}
#包括“stdafx.h”
#包括
#包括
int main()
{
DWORD64 OffsetHWM=0x7123456789012345;
WCHAR BufferBytes[256]={0};//已初始化-其中没有垃圾
//下面的wprintf工作正常
wprintf(L“来自wprintf:%8llX\n”,OffsetHWM);
//此对wsprintf的调用未使用预期值填充缓冲区
wsprintf(BufferBytes,L“%8llX\n”,OffsetHWM);
wprintf(L“来自wsprintf:%s\n”,BufferBytes);//打印垃圾
wprintf(L“\n”);//只是为了整洁
wsprintf(BufferBytes,L“%8”PRIx64“\n”,OffsetHWM);
wprintf(来自wsprintf的L:%s\n“,缓冲字节);
//这将截断(如预期的)OffsetHWM的值-不有用
wsprintf(BufferBytes,L“%8lx\n”,OffsetHWM);
wprintf(来自wsprintf的L:%s\n“,缓冲字节);
返回0;
}
不应再使用wprintf()
wprintf(),它是一个Windows特定的函数,可以调用wsprintfA()wsprintfW()来执行实际工作,这两个函数在其Windows开发中心文档站点()上都有以下说明:

注意不要使用。考虑使用以下函数之一:<强> STRIGCBPRTNF,StrugCBPrTNFEX,StrcCCHPrTNF,<强>或>强> StrcCCHPrTFFEX 。请参阅安全注意事项。

不要使用wprintf(),这没有意义。它仍然存在的唯一原因是允许移植在16位版本的Windows中开始使用的程序。这是他们将图形操作系统及其应用程序塞进640KB内存的众多技巧之一。不久以前。