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

我想你需要用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了单个设备,因此不清楚是否应该将该范围加倍,或者您应该使用其他值(甚至相同的值);您需要调整格式字符串的那一部分以适合自己。这种技术也是我在名称末尾添加冒号的方法——将名称和冒号格式化为字符串,然后将该字符串格式化为最终的打印操作。

于 2012-10-31T06:59:58.407 回答