C printf:可变字符串列的宽度,左对齐

Job*_*obs 1 c formatting pointers

我正在尝试格式化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");
Run Code Online (Sandbox Code Playgroud)

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*));

然后,对于每个icalloc spaces[i]然后,而不是做"%*s",我做%s%s,这里打印的第二个字符串是spaces[i]

但这似乎也不起作用,因为我需要做

snprintf(spaces[i], maxlen[i]-size_of_string, "  (however many spaces)    ");
Run Code Online (Sandbox Code Playgroud)

而且我不知道要为第三个参数硬编码多少个空格。没有" " * length像python这样的操作来创建length大小合适的字符串" "

Wea*_*ane 7

要以给定的宽度将输出左对齐-,请在格式说明符中添加一个符号

printf("%-*s %-*s %-*s %-*s %-*s %-*s %-*s %-*s %-*s\n", ... ); 
Run Code Online (Sandbox Code Playgroud)

提供的参数width可以是计算int值。您可以像这样硬编码宽度

printf("%-10s\n", "string");
Run Code Online (Sandbox Code Playgroud)

如果您不知道要占用多少空间,可以使用一个临时字符串

char tempstr[100];
int len = sprintf(tempstr, "%d", value);
printf("%s%-*s\n", tempstr, 30 - len, "string");
Run Code Online (Sandbox Code Playgroud)