【问题标题】:wsprintf limits me to 1024 characters? [closed]wsprintf 将我限制为 1024 个字符? [关闭]
【发布时间】:2016-01-01 08:29:34
【问题描述】:

基于wsprintf 的文档,它将输出缓冲区限制为1024 字节。如果我需要存储的文本大于 1024 字节怎么办?如何扩展此限制,或者我可以使用什么替代方法而不需要我使用 lstrcat 或类似的?

char output[4096];
wsprintf(output, "%s", input); // assume input is a piece of text > 1024 characters
printf(output); // only prints the first 1024 characters

如何将输入中的所有字符复制到输出中,超过 wsprintf 的 1024 字节限制?

【问题讨论】:

  • 你能发布你的代码吗?
  • 你能提供一个你试图开始工作的实际代码 sn-p 吗?拥有具体细节将更容易提供解决方案或变通方法。
  • 使用 StringCchPrintf 或 StringCchPrintfEx ...其限制为 2147483647
  • 嗯,你是这里唯一一个生气的人……我只是陈述事实。同样,如果您不展示您的实际要求,我们将无法帮助您。格式化打印与“尽可能少的计算”不一致。
  • @chqrlie 他从他的问题中删除了那个。下面他写的是wsprintf(output, "%d + %d = %d", 1, 2, 3),所以他似乎在寻找更复杂的东西。当然,如果他不清楚自己想要优化什么,就没有办法引导他达到最优。

标签: c winapi


【解决方案1】:

您可以使用标准函数snprintfswprintf。他们没有这样的限制:

char output[4096];
int length = snprintf(output, sizeof output, "%02000d", 1);
 // should print 2000 zeros:
printf("length=%d output=%s\n", length, output);

swprintfwchar_t 的等效函数:

wchar_t output[4096];
int length = swprintf(output, sizeof output / sizeof *output, "%02000d", 1);
 // should print 2000 zeros:
printf("length=%d output=%Ls\n", length, output);

【讨论】:

  • 如何在 snprintf 中连接多个论点,例如对于 wsprintf,我可以做到 wsprintf(output, "%d + %d = %d", 1, 2, 3);。我怎样才能用 snprintf 达到同样的效果?
  • @TigerJoe 你读过文档吗? snprintf 采用格式参数,就像 wsprintf ...所有 *printf 函数一样。
  • snprintf 进行与sprintf 相同的转换,但在传递目标缓冲区的大小时它是安全的。不要使用sprintfwsprintf,因为微软限制了wsprintf 的最大输出作为防止缓冲区溢出的蹩脚尝试,但程序员仍然通过传递更短的缓冲区以冒险的方式使用它。
  • 如果可用,还有 snwprintf_s 函数每个 K.3.9.1.3
  • @AndrewHenle:确实如此,但snwprintf_s() 并没有比swprintf() 买多少。 %n 处理被禁用,超过目标缓冲区大小的输出行为更加复杂,默认中止程序而不是截断输出。
【解决方案2】:

wsprintf() 已弃用。请改用Strsafe functionsStringCbPrintf/Ex()StringCchPrintf/Ex())之一。它们支持最大 2,147,483,647 个字符的输出缓冲区 (STRSAFE_MAX_CCH)。

【讨论】:

  • 这不是我需要的。这对于我需要做的事情来说太重了。它使进程崩溃。
  • @TigerJoe 如果它使进程崩溃,那么你就是在滥用它。如果您需要帮助,请发布您的实际代码或说明您的要求的等效代码......您发布的只是一个字符串副本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 2012-12-31
  • 1970-01-01
相关资源
最近更新 更多