- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的环境是 Windows 7 专业版(32 位)上的 RADStudio XE4 Update1。
我发现在 C++ Builder 中有一个 System::UnicodeString::Format()
静态方法。
Format()
可以按如下方式使用。但是,我认为可以使用 String().sprintf()
来完成同样的事情。
String str;
// --- (1) ---
str = String::Format(L"%2d, %2d, %2d", ARRAYOFCONST((10, 2, 3)));
ShowMessage(str); // 10, 2, 3
// --- (2) ---
str = String().sprintf(L"%2d, %2d, %2d", 10, 2, 3);
ShowMessage(str); // 10, 2, 3
我的问题是在什么情况下使用 Format()
比使用其他函数更好?
这只是品味问题吗?
最佳答案
在内部,UnicodeString::Format()
调用 Sysutils::Format()
,这是Delphi的格式化功能。请记住,大部分 RTL/VCL/FMX 是用 Delphi 而非 C++ 编写的。
在内部,UnicodeString::sprint()
调用 C 运行时的 vsnwprintf()
函数。
不同的框架,不同的接口(interface),不同的格式化规则,结果相似。
使用 UnicodeString::Format()
而不是 UnicodeString::sprint()
的一个好处是 Format()
执行类型检查在运行时。如果它在比较格式化字符串和输入参数时检测到不匹配,它将引发异常。 UnicodeString::sprintf()
不会那样做,它会完全按照您在格式化字符串中指定的方式解释输入值,因此如果您出错,则可能会破坏输出或彻底崩溃您的代码。
但是,如果您谨慎使用参数,差异就归结为个人喜好问题。.
关于c++builder - 在什么情况下使用 System.UnicodeString.Format?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26006892/
从 ICU 4.2.1 开始,将 UnicodeString 设置为 C 字符串的唯一直接方法是使用数据构造一个新的 UnicodeString,然后将所需的字符串设置为新字符串,从而分配、复制、并释
我正在尝试编译我已声明为类成员的项目: icu::UnicodeString label; icu::UnicodeString tags; icu::UnicodeString domain; ic
我有一个 STL map 容器,里面装满了成对的 vcl UnicodeString 对象。我正在尝试使用下面引用的代码将其转储到文件中,但我得到的不是我的字符串,而是一个充满十六进制地址的文件。 /
如何去除重复值 std::vector > myVect; 是否有任何内置函数或者我需要为此编写自定义代码 最佳答案 假设 (a) std::set 不是您想要的 [即您希望在您的 std::vec
我正在运行 ubuntu,我可以构建 ICU 我已经包括: #include using namespace icu; 这是我的 ICU 构建方法: CPPFLAGS="-DU_USING_ICU_
无法编译 php国际 (php - 5.5.9,ubuntu - 14.04,icu - 67) 当我尝试 pecl 安装国际 ,出现以下错误 In file included from /tmp/p
在 Delphi 2009 及更高版本中,字符串类型隐式等于 UnicodeString 类型。我现在的纪律是为我最近的基本单位使用明确的 UnicodeString 类型,以消除混淆。是否有一个编译
我正在将一个旧项目从 C++ Builder 2009 移植到 XE5。在旧项目中,Unicode 字符串的编译器选项设置为“_TCHAR maps to: char”。这在旧项目中运行良好。 移植时
我正在测试从 Delphi 5 到 XE 的迁移。由于不熟悉 UnicodeString,在提出问题之前我想先介绍一下它的背景。 Delphi XE 面向字符串的函数:Copy、Delete 和 In
我有这段代码可以根据列数据为网格行着色(网格来自 devexpress) var AColumn: TcxCustomGridTableItem; gs: variant; begin AColu
如何检查 UnicodeString 的字符? 我试过: UnicodeString us = "stuff"; if ( (us[2] == L"@") ) 但我得到:E2034 无法将 'wcha
我有一个包含四个单词行的列表框的表单。 当我单击一行时,应该会在四个不同的文本框中看到这些词。 到目前为止,我已经一切正常,但我在字符转换方面遇到了问题。 列表框中的字符串是 UnicodeStrin
在过去,我有一个函数可以转换 WideString到 AnsiString指定代码页的: function WideStringToString(const Source: WideString; C
我发现自己需要一种方法来将字符串更改为可安全用于 ASCII 和 UTF16-LE(如某些 Windows 注册表字符串中所见)的小写字母,并遇到了这个问题:How to convert std::s
我正在尝试使用 boost 序列化库序列化 icu::UnicodeString 但遇到了问题。 icu::UnicodeString 没有序列化所需的序列化函数。所以我尝试创建它,但我不确定如何制作
我的环境是 Windows 7 专业版(32 位)上的 RADStudio XE4 Update1。 我发现在 C++ Builder 中有一个 System::UnicodeString::Form
假设我们有一个来自其他地方的 char 字符串,稍后将其用作接受宽字符串的函数的输入参数。 在变体 1 中,从 char 字符串创建 UnicodeString,并在第二步中用作指向 LoadLibr
请帮我将 unicodestring 转换为字符串 这就是我获取 unicodestring 的方式 UnicodeString _str = OpenDialog1->FileName; 或者是否可
是否可以通过 printf 将 char* 参数打印到 UnicodeString 对象中?成员函数? 以下代码给出了错误的结果(损坏的字符串): UnicodeString s; s.printf(
据我了解,Boost.Filesystem 使用 native 语言环境编码,我使用 ICU 的 UnicodeString 而不是 std::string,因为它适用于 Unicode。但是,我想将
我是一名优秀的程序员,十分优秀!