Возможно ли распечатать только определенный раздел C-строки без создания отдельной подстроки?
Скажем, у меня есть следующее:
char* string = "Hello, how are you?";
Возможно ли распечатать только последние 5 байтов этой строки? Как насчет первых 5 байтов? Есть ли какая-то вариация printf, которая позволила бы это сделать?
Ответ 1
Возможно ли распечатать только последние 5 байтов этой строки?
Да, просто передайте указатель на символ "пятый по счету". Вы можете определить это на string + strlen(string) - 5.
Как насчет первых 5 байтов?
Используйте спецификатор точности: %.5s
#include <stdio.h>
#include <string.h>
char* string = "Hello, how are you?";
int main() {
/* print at most the first five characters (safe to use on short strings) */
printf("(%.5s)\n", string);
/* print last five characters (dangerous on short strings) */
printf("(%s)\n", string + strlen(string) - 5);
int n = 3;
/* print at most first three characters (safe) */
printf("(%.*s)\n", n, string);
/* print last three characters (dangerous on short strings) */
printf("(%s)\n", string + strlen(string) - n);
return 0;
}
Ответ 2
Да, последние пять байтов этой строки можно сделать с помощью:
printf ("%s\n", &(string[strlen (string) - 5]));
Первые пять можно сделать с помощью:
printf ("%.5s\n", string);
Вы можете комбинировать их для получения подстрок внутри строки. Слово how может быть напечатано с помощью:
Вам нужно быть осторожным, чтобы строка была достаточно длинной, чтобы это работало. Печать последних пяти символов односимвольной строки приведет к поведению undefined, так как индекс заканчивается на -4. Другими словами, проверьте длину строки, прежде чем пытаться это сделать.