1

パーティションテーブルを表示していますが、テーブルは次のように表示されます。

Number     Device name       Partition type      Size in MB
------------------------------------------------------------
1           /dev/sda1         NTFS                    300
2           /dev/sda2         *Win95 FAT32             99
3           /dev/sda3         Unknown                 128
4           /dev/sda4         NTFS                  19472
120         /dev/sda120       NTFS                   3000

*=Active partition

上記を表示するために、フォーマットされた出力printfを使用しており、フォーマット文字列は

"%-6d=partition number    %-25.25s=device name  %c=active partition    %-30.30s=part type          %7Ld=size"

ここで、同じパーティションテーブルを表示したいのですが、パーティションスロットのギャップが次のような範囲で表示されるように、若干の変更を加えています。

5-119     /dev/sda5.../dev/sda119    Empty          0

フォーマットされた文字列を次のように使用しています。

%d-%-6d=partition range   %s%d...%s%d=(/dev/sda5.../dev/sda119)   %c  %-30.30s  %7Ld

しかし、それは私を助けません。

正しいフォーマット文字列は何ですか?gccコンパイラを使用しています。

4

1 に答える 1

1

2つの複合文字列を準備するために使用する必要があると思います。それから、実際の印刷をsnprintf()より簡単に行うことができます。printf()実際のコードを表示していないので、すべてを推測する必要があります。これは厄介です...

int   min = 5;
int   max = 119;
char *dev = "/dev/sda";

char  num_range[32];
char  dev_range[60];

snprintf(num_range, sizeof(num_range), "%d-%d", min, max);
snprintf(dev_range, sizeof(dev_range), "%s%d...%s%d", dev, min, dev, max);

printf("%-10s   %-50.50s   %c%-30.30s  %7d", num_range, dev_range, ' ', "Empty", 0);

単一のデバイスに指定%-25.25sしたため、範囲に対してそれを2倍にする必要があるのか​​、それとも他の値(または同じ値)を使用する必要があるのか​​が明確ではありません。自分に合うようにフォーマット文字列のその部分を微調整する必要があります。この手法は、名前の末尾にコロンを付ける方法でもあります。名前とコロンを文字列にフォーマットしてから、その文字列を最終的な印刷操作にフォーマットします。

于 2012-10-31T06:59:58.407 に答える