【问题标题】:Exist any Delphi RTL function equivalent to swscanf存在任何与 swscanf 等效的 Delphi RTL 函数
【发布时间】:2012-01-27 20:07:19
【问题描述】:

我正在寻找与sscanf/swscanf C++ 函数等效的 RTL delphi 函数。在 RTL delphi 函数中是否存在类似的东西,或者我必须寻找第三方实现?

【问题讨论】:

标签: delphi delphi-xe


【解决方案1】:

我个人会简单地调用可以从 msvcrt.dll 导入的真实函数。

function sscanf(buffer, format: PAnsiChar): Integer; 
    cdecl; varargs; external 'msvcrt.dll';
function swscanf(buffer, format: PWideChar): Integer; 
    cdecl; varargs; external 'msvcrt.dll';

这些是 C 标准库函数的久经考验的稳健实现。

【讨论】:

  • @WarrenP 您不需要重新分发 msvcrt.dll,就像您不需要重新分发 kernel32.dll、gdi32.dll 等一样 - 它是 OS Windows 的一部分。
  • 是的,从 Windows 2000 开始,msvcrt 是一个标准的 Windows 组件。它是 MSVC6 的 C 运行时。
【解决方案2】:

你可以downloadDelphi的扫描函数,这是移植的MSVC RTL函数。

【讨论】:

    【解决方案3】:

    http://cc.embarcadero.com/item/24258 有一个 sscanf 端口,但它看起来早于 Unicode,因此可能需要对 XE 进行一些调整。

    【讨论】:

      【解决方案4】:

      即使在 C 语言中,这些也是不推荐使用的函数。使用更现代和类型安全的东西来解析数据。这将成为您的应用程序中大量错误的来源。例如,您打算如何使(wchar_t *) C 风格的 scanf 字符串函数与 Delphi 字符串互操作?

      【讨论】:

      • 他们不是因为他们的 \0 成瘾而被弃用吗?仍然允许使用 -n 版本吗?
      • 这些函数根本没有被弃用。
      • _s_s_l 版本未被弃用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-15
      • 2019-03-29
      • 1970-01-01
      • 2010-10-04
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多