Припустимо, у вас є рядок, яка НЕ null
закінчується, і ви знаєте її точний розмір, тож як можна надрукувати цей рядок за допомогою printf
C? Я пригадую такий метод, але зараз не можу дізнатися ...
Припустимо, у вас є рядок, яка НЕ null
закінчується, і ви знаєте її точний розмір, тож як можна надрукувати цей рядок за допомогою printf
C? Я пригадую такий метод, але зараз не можу дізнатися ...
Відповіді:
Є можливість з printf, вона виглядає так:
printf("%.*s", stringLength, pointerToString);
Не потрібно нічого копіювати, не потрібно змінювати оригінальний рядок або буфер.
printf
навіть після ~ десятиліття ... :)
printf
буде надруковано до 11 символів або до появи NULL, залежно від того, що станеться раніше; у вашому прикладі NULL займає перше місце. Визначення максимальної довжини не змушує NULL втрачати значення "кінець рядка" для printf
.
Ось пояснення того, як %.*s
працює, і де це вказано.
Специфікації перетворення в рядку шаблону printf мають загальну форму:
% [ param-no $] flags width [ . precision ] type conversion
або
% [ param-no $] flags width . * [ param-no $] type conversion
Друга форма - для отримання точності зі списку аргументів:
Ви також можете вказати точність '*'. Це означає, що наступний аргумент у списку аргументів (до фактичного значення для друку) використовується як точність. Значення має бути цілим, і ігнорується, якщо воно негативне.
- Синтаксис перетворення вихідних даних у посібнику glibc
Для %s
форматування рядків точність має особливе значення:
Можна вказати точність, щоб вказати максимальну кількість символів для запису; в іншому випадку символи в рядку до, але не включаючи завершальний нульовий символ записуються у вихідний потік.
- Інші вихідні перетворення в посібнику glibc
Інші корисні варіанти:
"%*.*s", maxlen, maxlen, val
правильно виправдає, вставляючи пробіли раніше;"%-*.*s", maxlen, maxlen, val
вийде-виправдає."%-*.*s", padding, str_view.size(), str_view.data()
Ви можете використовувати fwrite () для stdout!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
Таким чином ви виведете перші символи (число, визначене змінною number_of_chars) у файл, в цьому випадку - stdout (стандартний вихід, ваш екран)!
printf("%.*s", length, string)
НЕ буде працювати.
Це означає, щоб надрукувати довжину байтів ДЛЯ АБО АБО нульовий байт, залежно від того, що відбувається раніше. Якщо ваш нерегулярний масив char-char містить нульові байти ПЕРЕД довжиною, printf зупиняється на них, а не продовжується.
#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;
}
C
контексті всі рядки закінчуються нульовим завершенням. Масиви char без нуля в них не є рядками ... вони є масивами char :)