Я пытаюсь отформатировать вывод строки 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) ");
И я не знаю, сколько пробелов нужно жестко закодировать для третьего аргумента. Не существует операции " " * length
, как в Python, для создания строки размером length
, состоящей из " "
символов.