通过char数组解析输入到char指针

时间:2015-03-06 17:26:11

标签: c++ arrays linux shell pointers

所以,这里的目标是建立一个linux shell,以便将用户输入处理成多少个参数和参数本身 - 最终到fork和execvp。我遇到了让我的命令分开的问题。我需要计算它们,它工作正常,并将命令分成可以调用它们的char指针数组。如果你只有一个命令,我有一个方法可以使用它,但如果你做了两个,那么它会被淘汰。我把它弄糟了,然后回到这个方法,因为我觉得我离我更近了。无论如何......这是标准的操作系统 - 家庭作业 - 。我不是在寻找答案,只是寻找一些指导或示例。最终,如果我目前正在使用的这种方法不能通过execvp运行,我也很感激,只是知道这一点...

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <ctype.h>
#include <stdio.h>
#include <string.h>

using namespace std;

int count_args(char *str);
void get_args(char* in_args, char** out_args);

int main() {
string my_path;
char user_input[1064];
char *args[64];
my_path = getenv("PATH");

while (1) {
    cout << ">> ";
    cin.getline(user_input, 1064);

    int num_words = count_args(user_input);

    get_args(user_input, args);

    for (int i = 0; i < num_words; ++i) {
        cout << num_words << " " << args[i] << endl;
    }
}

return 0;
}

int count_args(char *str) {
int cnt = 0, space;

while (*str) {
    if (*str == ' ' || *str == '\n' || *str == '\t') {
        space = 0;
    } else if (space == 0) {
        space = 1;
        ++cnt;
    }
    ++str;
}

return cnt;
}

void get_args(char* in_args, char** out_args) {
char str[64];
int pos = 0;

for (int i = 0; i < 64; ++i) {
    str[i] = '0';
}

while (*in_args) {
    if (*in_args != ' ' || *in_args != '\n' || *in_args != '\t') {
        str[pos] = *in_args;
        ++pos;
    } else {
        memcpy(out_args, str, pos);
        pos = 0;
    }
    *in_args = *in_args + 1;
}
}

0 个答案:

没有答案