0

我正在学习 Objective-C,我知道 NSLog 可以打印出来,但是我迷失了这个 %-20s %-32s。

这个-20s和-32s在这里做什么

  -(void) list
    {
    NSLog (@"======== Contents of: %@ =========", bookName);
    for ( AddressCard *theCard in book )
    NSLog (@"%-20s %-32s", [theCard.name UTF8String],
    [theCard.email UTF8String]);
    Array Objects 339
    NSLog (@"==================================================");
    }
    @

====================================
|                                  |
| Tony Iannino                     |
| tony.iannino@techfitness.com     |
|                                  |
|                                  |
|                                  |
| O O                              |
====================================
4

2 回答 2

3

它们是 printf 格式说明符,用于打印 20 和 32 个字符的字符串,右侧用空格填充。

% start of the specifier
- align the field to left instead of right
32 width of field
s type of field is string

完整文档:https ://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

于 2013-04-03T06:19:41.840 回答
1

NSLog()理解带有一些扩展名的格式字符串,因此您可以在文档中printf()查找它的作用:printf()

每个转换规范都由“%”字符 [XSI] 或字符序列“%n$” [...]

  • 零个或多个标志 [...]
  • 可选的最小字段宽度 [...]
  • 可选精度 [...]
  • 可选的长度修饰符 [...]
  • 一个转换说明符字符,指示要应用的转换类型。

[...]

标志字符及其含义是:

[...]

-:转换结果在域内左对齐。如果未指定此标志,则转换为右对齐。[...]

转换说明符及其含义是:

[...]

s:参数应该是一个指向 char 数组的指针。数组中的字节应写入(但不包括)任何终止的空字节。如果指定了精度,则写入的字节数不得超过该数量。如果精度未指定或大于数组的大小,应用程序应确保数组包含空字节。

[...]

因此,此转换所做的是打印一个数组const char,分别打印 20 个和 32 个字符,并在右侧填充空格以使左对齐生效。

于 2013-04-03T06:25:55.443 回答