Разделить символ * в разделителе в автономном режиме C++

Я пытаюсь написать свою собственную операционную систему. Я следовал инструкциям в OSDev Wiki, и сейчас я работаю над написанием консольного режима с командами. Мне нужно уметь разделить char* в char**, без всей функциональности библиотеки (следовательно, отдельно стоящей). Я пытался выполнять итерацию до тех пор, пока не встретил свой разделитель и т. Д., Но как бы я это ни делал, я просто застрял в конце моего первого результата. Что я делаю неправильно? Это то, что я до сих пор:

static char** splitStr (char* string, char delim) {

    char returner[VGA_WIDTH][255];
    int loc = 0;
    int innerLoc = 0;
    for (int i = 0; string[i] != 0x00; i++) {
        char c = string[i];
        if (c != delim) {
            returner[loc][innerLoc] = c;
            innerLoc++;
        } else {
            print ("a string was ");
            println (returner[loc]);
            innerLoc = 0;
            loc++;
        }
    }
    print ("the first string was ");
    println (returner[0]);
    return (char**)returner;
}

Я задаю вопрос о том, как написать конкретную функцию в автономном режиме C++.

2 ответа

Решение
void split(const char* str, const char d, char** into)
{
    if(str != NULL && into != NULL)
    {
        int n = 0;
        int c = 0;
        for(int i = 0; str[c] != '\0'; i++,c++)
        {
            into[n][i] = str[c];
            if(str[c] == d)
            {
                into[n][i] = '\0';
                i = -1;
                ++n;
            }
        }
    }
}

Я выделяю с помощью calloc избавиться от мусорных персонажей.

РЕДАКТИРОВАТЬ: Вы должны распределить указатели внутри char** прежде чем писать им.

void allocarr(char** pointers, int bytes, int slots)
{
    int i = 0;
    while(i <= slots)
    {
        pointers[i] = (char*)calloc(1, bytes);
        ++i;
    }
}

...

char** sa = (char**)malloc(50*sizeof(char*));
allocarr(sa, 512, 50);
split("Hello;World;", ';', sa);
puts(sa[0]);

Вам нужна функция strspn. Вы можете создать свой собственный с помощью C или получить существующий.

Другие вопросы по тегам