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*));
然后,对于每个i
, calloc
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
大小合适的字符串" "
。
要以给定的宽度将输出左对齐-
,请在格式说明符中添加一个符号
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)