Например, у меня естьПолучить подстроку полукокса *
char *buff = "this is a test string";
и хотите получить "test"
. Как я могу это сделать?
Например, у меня естьПолучить подстроку полукокса *
char *buff = "this is a test string";
и хотите получить "test"
. Как я могу это сделать?
char subbuff[5];
memcpy(subbuff, &buff[10], 4);
subbuff[4] = '\0';
Работа сделано :)
Предполагая, что вы знаете, положение и длину подстроки:
char *buff = "this is a test string";
printf("%.*s", 4, buff + 10);
Вы можете достичь того же путем копирования подстроки в другой пункт назначения памяти, но это не разумно, так как у вас уже есть в памяти.
Это хороший пример избежания ненужного копирования с помощью указателей.
@procrastinator: Не только для печати. Это жизнеспособный подход в случае, если подстрока не будет изменена. Таким образом, вы просто сохраняете пару указателей вместо выделения буфера переменной длины. –
N̶i̶c̶e̶ ̶o̶n̶e̶ ̶f̶o̶r̶ ̶p̶r̶i̶n̶t̶i̶n̶g̶ ̶o̶n̶l̶̶̶̶y̶ Извините, если вы ошиблись, я имею в виду, что ваше решение не требует дополнительной строки, что идеально подходит, когда вам нужно только распечатать :-) – leaf
использовать sprintf для хранения форматированной строки –
Вы можете просто использовать strstr()
из <string.h>
См. Комментарий Grault ниже ниже –
Использование char* strncpy(char* dest, char* src, int n)
из <cstring>
. В вашем случае вам нужно будет использовать следующий код:
char* substr;
strncpy(substr, buff+10, 4);
Полная документация на strncpy
функции here.
Это будет отходы память. Вы были предупреждены! : P – alexandernst
@alexandernst: Как именно? 5 байтов, выделенных в стеке (который освободится, когда он выпадет из области видимости) вряд ли потеряет память ... – Goz
Еще больше, чем вам нужно, но да, они будут освобождены, как только код покинет текущий стек. – alexandernst