Разделить символ * в разделителе в автономном режиме 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 или получить существующий.