Подтвердить что ты не робот

Возможно ли распечатать только определенный раздел C-строки без создания отдельной подстроки?

Скажем, у меня есть следующее:

char* string = "Hello, how are you?";

Возможно ли распечатать только последние 5 байтов этой строки? Как насчет первых 5 байтов? Есть ли какая-то вариация printf, которая позволила бы это сделать?

4b9b3361

Ответ 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 может быть напечатано с помощью:

printf ("%.3s\n", &(string[strlen (string) + 7]));

Вам нужно быть осторожным, чтобы строка была достаточно длинной, чтобы это работало. Печать последних пяти символов односимвольной строки приведет к поведению undefined, так как индекс заканчивается на -4. Другими словами, проверьте длину строки, прежде чем пытаться это сделать.