2010-11-18 3 views

ответ

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

Работа сделано :)

+10

Это будет отходы память. Вы были предупреждены! : P – alexandernst

+11

@alexandernst: Как именно? 5 байтов, выделенных в стеке (который освободится, когда он выпадет из области видимости) вряд ли потеряет память ... – Goz

+0

Еще больше, чем вам нужно, но да, они будут освобождены, как только код покинет текущий стек. – alexandernst

10

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

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

+7

Это своего рода обратная операция нормальной подстроки - больше похожа на indexOf. – Grault

71

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

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

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

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

+0

@procrastinator: Не только для печати. Это жизнеспособный подход в случае, если подстрока не будет изменена. Таким образом, вы просто сохраняете пару указателей вместо выделения буфера переменной длины. –

+1

N̶i̶c̶e̶ ̶o̶n̶e̶ ̶f̶o̶r̶ ̶p̶r̶i̶n̶t̶i̶n̶g̶ ̶o̶n̶l̶̶̶̶y̶ Извините, если вы ошиблись, я имею в виду, что ваше решение не требует дополнительной строки, что идеально подходит, когда вам нужно только распечатать :-) – leaf

+3

использовать sprintf для хранения форматированной строки –

8

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

$ man strstr

+0

См. Комментарий Grault ниже ниже –

50

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

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

Полная документация на strncpy функции here.

+23

, не забудьте добавить символ нулевого окончания '\ 0', если вы это сделаете. – evandrix

+10

не забудьте сделать malloc substr достаточно большим, если вы это сделаете. – FUD

Смежные вопросы