Предполагая, что у меня есть полный контроль над прототипом функции, я бы сделал это (сделайте это единственным исходным файлом ( без # включает ) и скомпилируйте, затем свяжите с остальной частью проекта)
Если #include <stddef.h>
является частью «без #include» (но не должно), тогда вместо size_t
используйте unsigned long
в коде ниже
#include <stddef.h>
/* split of a string in c without #include */
/*
** `predst` destination for the prefix (before the split character)
** `postdst` destination for the postfix (after the split character)
** `src` original string to be splitted
** `ch` the character to split at
** returns the length of `predst`
**
** it is UB if
** src does not contain ch
** predst or postdst has no space for the result
*/
size_t split(char *predst, char *postdst, const char *src, char ch) {
size_t retval = 0;
while (*src != ch) {
*predst++ = *src++;
retval++;
}
*predst = 0;
src++; /* skip over ch */
while ((*postdst++ = *src++) != 0) /* void */;
return retval;
}
Пример использования
char a[10], b[42];
size_t n;
n = split(b, a, "forty two", ' ');
/* n is 5; b has "forty"; a has "two" */