我正在尝试格式化printf字符串输出:
printf("%*s %*s %*s %*s %*s %*s %*s %*s %*s\n",
maxlen[0], "intf", maxlen[1], "ssid", maxlen[2],
"bssid", maxlen[3], "vlan", maxlen[4], "STA",
maxlen[5], "tx-pkts", maxlen[6], "rx-pkts", maxlen[7],
"security", maxlen[8], "Capabilities");
在这种情况下,maxlen
是一个数组,其值为5、13、17、4、3、7、7、15和12。
但是,在输出中,字符串是右对齐的,这意味着它们将浮动在其宽度大小的块的右侧。输出:
intf ssid bssid vlan STA tx-pkts rx-pkts security Capabilities
是否可以将这些字符串向左浮动?
例如,我想要[][][][][][][]security
代替security[][][][][][][]
,而不是width==15
。
我尝试创建一个spaces
字符串数组,如下所示:
char **spaces = (char**)malloc(9*sizeof(char*));
然后,对于每个i
,calloc
spaces[i]
,然后我不执行"%*s"
,而是执行%s%s
,打印的第二个字符串是spaces[i]
。
但是即使这样似乎也不起作用,因为我需要这样做
snprintf(spaces[i], maxlen[i]-size_of_string, " (however many spaces) ");
我不知道要为第三个参数硬编码多少个空格。没有像Python中的" " * length
操作那样创建length
个字符的" "
大小的字符串。
答案 0 :(得分:7)
要将输出按照给定的宽度左对齐,请在格式说明符中添加一个-
符号
printf("%-*s %-*s %-*s %-*s %-*s %-*s %-*s %-*s %-*s\n", ... );
为width
提供的参数可以是计算的int
值。您可以像这样对宽度进行硬编码
printf("%-10s\n", "string");
如果您不知道要占用多少空间,可以使用一个临时字符串
char tempstr[100];
int len = sprintf(tempstr, "%d", value);
printf("%s%-*s\n", tempstr, 30 - len, "string");