Я пишу программу для написания головы для определенного формата изображения. Этот формат изображения требует 256 символов в качестве заголовка перед любыми последующими необработанными данными изображения. Но у меня есть проблемы с заполнением пустых мест, чтобы заголовок длиной 256 символов.
Ниже приведена абстракция моей проблемы:
char pad[256];
sprintf( pad, "header info:%s=%f", "scale", 2.3);
cout<<pad<<"data here"<<endl;
Выход:
header info:scale=2.300000data here
Тем не менее, результат, который я ожидаю, выглядит так:
header info:scale=2.300000 data here
где «данные здесь» появляются после 256 символов от начала файла.
Как я могу изменить программу, чтобы заполнить пустые места в массиве символов?
Сделай это:
cout << setw(256) << left << pad << "data here" <<endl;
Вам может понадобиться #include <iomanip>
,
Кстати в вашем «реальном коде» вы должны использовать snprintf
чтобы избежать шансов переполнения буфера, при условии, что ваш %s
собирается получить некоторый аргумент, который работает во время выполнения. (Или желательно заменить sprintf
со струнным потоком).
Может быть, это может помочь вам. Формат -
который слева выравнивает текст. Например, следующее будет выравнивать текст с плавающей запятой слева с фиксированной шириной 20. При этом в качестве отступа используется символ пробела по умолчанию.
sprintf( pad, "header info:%s=%-20f", "scale", 2.3);