gpt4 book ai didi

C printf : variable string column width, 左对齐

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:09 25 4
gpt4 key购买 nike

我正在尝试格式化 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。

但是,在输出中,字符串是右对齐的,这意味着它们 float 到其宽度 block 的右侧。输出:

intf ssid bssid vlan STA tx-pkts rx-pkts 安全能力

有没有办法让这些字符串向左浮动?

所以我想要[][][][][][][]security,而不是security[][][][][][][]例如,对于 width==15倒数第二个 block 。

我尝试创建一个 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)    ");

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

最佳答案

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

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

关于C printf : variable string column width, 左对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55286618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com