以独立模式 C++ 在分隔符处拆分 char*
Split char* at delimiter in freestanding mode 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++ 独立模式下编写特定函数的问题。
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] != '[=10=]'; i++,c++)
{
into[n][i] = str[c];
if(str[c] == d)
{
into[n][i] = '[=10=]';
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]);
我正在尝试编写自己的操作系统。我已经按照 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++ 独立模式下编写特定函数的问题。
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] != '[=10=]'; i++,c++)
{
into[n][i] = str[c];
if(str[c] == d)
{
into[n][i] = '[=10=]';
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]);