Получите подстроку char *

Например, у меня есть это

char *buff = "this is a test string";

и хотите получить "test". Как я могу это сделать?

Ответ 1

char subbuff[5];
memcpy( subbuff, &buff[10], 4 );
subbuff[4] = '\0';

Задание выполнено:)

Ответ 2

Предполагая, что вы знаете позицию и длину подстроки:

char *buff = "this is a test string";
printf("%.*s", 4, buff + 10);

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

Это хороший пример избежания ненужного копирования с помощью указателей.

Ответ 3

Используйте char* strncpy(char* dest, char* src, int n) из <cstring>. В вашем случае вам нужно будет использовать следующий код:

char* substr = malloc(4);
strncpy(substr, buff+10, 4);

Полная документация по функции strncpy здесь.

Ответ 4

Вы можете использовать strstr. Пример кода здесь.

Обратите внимание, что возвращаемый результат не завершается нулем.

Ответ 5

Вы можете просто использовать strstr() от <string.h>

$man strstr