Это эффективный способ или существует лучший метод для этого?
Плюсы:
Использует strstr()
, что вероятноболее эффективен и корректен, чем кодирование вашего собственного поиска.
Минусы:
Не обрабатывает случай, когда strstr()
возвращает NULL
, что приводит к неопределенному поведению (UB). @ Пол Огилви
ptr = strstr(src,"CBC:");
// add test
if (ptr) {
// copy
} else {
// Handle not found, perhaps `sub[0] = '\0';`
}
char sub[13]={};
не соответствует C-коду. @ PMG .Полная инициализация массива не требуется - хотя это и является общепринятой практикой.
Код не совсем выполняет «хочу найти специальную подстроку в другой строке и сохранить ее как другую строку».Это больше похоже на «хочу найти специальную подстроку в другой строке и сохранить ее и более как другую строку».
strncpy(sub,ptr,sizeof(sub)-1)
может излишне заполнять массив нулевыми символами.Это неэффективно, когда ptr
указывает на строку, намного меньшую, чем sizeof(sub)
.Код может использовать strncat()
, но это сложно.Смотрите этот хороший ответ @AnT.
// alternative
char src[100] = "SOME DATE HERE CBC: 2345,23, SOME OTHER DATA";
char sub[13];
sub[0] = '\0';
const char *ptr = strstr(src, "CBC:");
if (ptr) {
strncat(sub, p, sizeof sub - 1);
}