Предположим, что у вас есть строка, которая НЕ null
завершена, и вы знаете ее точный размер, так как вы можете напечатать эту строку с помощью printf
в C? Я помню такой метод, но я не могу узнать сейчас...
Использование printf с не нулевой завершаемой строкой
Ответ 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.