Вы также можете попробовать использовать новый модуль регулярного выражения Python , который поддерживает совпадающие совпадения.
import regex as re
def count_overlapping(text, search_for):
return len(re.findall(search_for, text, overlapped=True))
count_overlapping('1011101111','11') # 5
Я уверен, что strtok возвращает указатель, который ссылается на тот первый аргумент, который, в вашем случае, является выделением стека. Я верю, что возвращение массива указателей на это выделение стека приведет к неопределенному поведению. Это может или не может быть причиной вашей проблемы. Это трудно понять, не видя больше кода. Чтобы протестировать, попробуйте изменить эту часть своего кода следующим образом:
void parse_cmd(char *retval[], char *cmd){
char *tmp;
char *a = strdup(cmd);
int i = 0;
Прежде чем использовать его в производстве, вам нужно найти какой-то способ, чтобы убедиться, что вы освободили «a», иначе вы получите утечку. , Может быть, вы могли бы просто вернуть его вместо void и освободить его из другого места, или вы могли бы на самом деле strdup () каждый токен и написать функцию, чтобы освободить их всех или все, что работает для вас.
Если есть другие проблемы, они могут быть в другом коде. Я действительно не вижу здесь ничего плохого.