Использование printf с не нулевой завершаемой строкой

Предположим, что у вас есть строка, которая НЕ null завершена, и вы знаете ее точный размер, так как вы можете напечатать эту строку с помощью printf в C? Я помню такой метод, но я не могу узнать сейчас...

Ответ 1

Есть возможность с printf, это выглядит следующим образом:

printf("%.*s", stringLength, pointerToString);

Не нужно ничего копировать, нет необходимости изменять исходную строку или буфер.

Ответ 2

Вот объяснение того, как работает %.*s и где он указан.

Спецификации преобразования в строке шаблона printf имеют общий вид:

% [ param-no $] flags width [ . precision ] type conversion

или

% [ param-no $] flags width . * [ param-no $] type conversion

Вторая форма для получения точности из списка аргументов:

Вы также можете указать точность '*. Это означает, что следующий аргумент в списке аргументов (до фактического значения, которое нужно распечатать) используется как точность. Значение должно быть int и игнорируется, если оно отрицательно.

- Синтаксис преобразования вывода в руководстве glibc

Для форматирования строки %s точность имеет особое значение:

Можно указать точность, указывающую максимальное количество символов для записи; иначе символы в строке до, но не включая завершающий нулевой символ, записываются в выходной поток.

- Другие преобразования вывода в руководстве glibc

Другие полезные варианты:

  • "%*.*s", maxlen, maxlen, val будет правно обосновывать, вставлять пробелы перед;
  • "%-*.*s", maxlen, maxlen, val будет левосторонним.

Ответ 3

Вы можете использовать fwrite() для stdout!

fwrite(your_string, sizeof(char), number_of_chars, stdout);

Таким образом вы выведете первые символы (число, определяемое переменной number_of_chars) в файл, в этом случае на stdout (стандартный вывод, ваш экран)!

Ответ 4

printf("%.*s", length, string) НЕ будет работать.

Это означает, что вы должны печатать UP длины байтов ИЛИ нулевой байт, в зависимости от того, что наступит раньше. Если ваш массив с нулевым завершающим символом-of- char содержит пустые байты перед длиной, printf остановится на них и не продолжит.

Ответ 5

#include<string.h> 
int main()
{
/*suppose a string str which is not null terminated and n is its length*/
 int i;
 for(i=0;i<n;i++)
 {
 printf("%c",str[i]);
 }
 return 0;
}

Я редактировал код, иначе:

#include<stdio.h>
int main()
{
printf ("%.5s","fahaduddin");/*if 5 is the number of bytes to be printed and fahaduddin is the string.*/

return 0;

}

Ответ 6

printf("%.5s", pointerToNonNullTerminatedString);

Длина строки будет равна 5.