Вы должны использовать два шага:
char buffer[20];
snprintf(buffer, sizeof(buffer), "%d. %s:", 1, "Test");
printf("%-*s", 10, buffer);
Операция snprintf()
дает вам строку 1. Test:
в buffer
; обратите внимание, что он включает в себя вывод :
и не принимает никаких завершающих пробелов в строке "Test"
). Операция printf()
форматирует строку влево (-
) длиной (по крайней мере) 10 (*
в формате и 10 в списке аргументов) на стандартный вывод. Предположительно, после этого выхода в той же строке появится другое. в противном случае нет очевидного смысла в пустом заполнении.
Для получения полной информации см:
Это охватывает основные операции *printf()
семейства функций (но не перечисляет интерфейсы к v*printf()
или *wprintf()
семейств функций) ,
Код в вопросе и в ответе выше делается с константами. Более реалистичный сценарий будет:
void format_item(int number, const char *text, int width)
{
char buffer[width+1]; // C99 VLA
snprintf(buffer, sizeof(buffer), "%d. %s:", number, text);
printf("%-*s", width, buffer);
}
Обратите внимание, что этот код обрезает отформатированные данные, если число плюс строка слишком длинная. Есть способы обойти это, если вы работаете немного сложнее (например, добавьте более 1
в width
в определение buffer
- возможно, добавьте 15 вместо 1).
Вы могли бы написать:
format_item(1, "Test", 10);
или:
char *str_var = …some function call, perhaps…
int item = 56;
format_item(++item, str_var, 20);
т.д.
Не должно быть "Абдул Раззак"? – haccks
Два шага: 'snprintf()' to create '" 1. Тест: "', а затем 'printf ("% - * s ", 10, buffer);' где у вас есть 'char buffer [20];' и отформатируйте значение в нем с помощью 'snprintf()'. –
@JonathanLeffler не может быть достигнуто только с помощью «printf»? – razzak