0

私は Objective-C を勉強しています。NSLog を印刷することは知っていますが、この %-20s %-32s で迷っています。

この-20代と-32代はここで何をしているの?

  -(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

これらは、右側が空白で埋められた 20 文字と 32 文字の文字列を出力するための printf 書式指定子です。

% 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$" [...] によって導入されます。

  • 0 個以上のフラグ [...]
  • オプションの最小フィールド幅 [...]
  • オプションの精度 [...]
  • オプションの長さ修飾子 [...]
  • 適用する変換のタイプを示す変換指定子文字。

[...]

フラグ文字とその意味は次のとおりです。

[...]

-: 変換結果は、フィールド内で左詰めになります。このフラグが指定されていない場合、変換は右詰めになります。[...]

変換指定子とその意味は次のとおりです。

[...]

s: 引数は、char の配列へのポインターでなければなりません。配列からのバイトは、終端のヌル バイトまで (ただし、ヌル バイトを含まない) 書き込まれます。精度が指定されている場合、そのバイト数を超えて書き込まれることはありません。精度が指定されていないか、配列のサイズよりも大きい場合、アプリケーションは配列にヌル バイトが含まれていることを確認する必要があります。

[...]

したがって、この変換で行われるのは、 の配列をconst char出力し、それぞれ 20 文字と 32 文字を出力し、左詰めを有効にするために右側にスペースを埋め込むことです。

于 2013-04-03T06:25:55.443 に答える