Arduino имеет очень ограниченные ресурсы, и C строки намного лучше в этой среде. Если вам не нужно сохранять оригинал, я обычно изменяю эту строку.
char **split(char **argv, int *argc, char *string, const char delimiter, int allowempty)
{
*argc = 0;
do
{
if(*string && (*string != delimiter || allowempty))
{
argv[(*argc)++] = string;
}
while(*string && *string != delimiter) string++;
if(*string) *string++ = 0;
if(!allowempty)
while(*string && *string == delimiter) string++;
}while(*string);
return argv;
}
int main()
{
char str[] = "first||Second|||third";
char str1[] = "first||Second|||third";
char *argv[8];
int argc;
split(argv, &argc, str, '|', 0);
for(int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);
printf("-----------------\n");
split(argv, &argc, str1, '|', 1);
for(int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);
}