所以基本上是我想做的事:UNIX minishell焦炭引入**焦炭
如果我寫
你好,我是這裏
char command[20]
應該是 '你好'(這部分作品)和char *parameters
應該有一個指針,其點「你好「我」'是 '' 這裏 '' NULL 」。
對於'你好'部分我剛剛使用char *com
這已經是一個指針。但我真的不知道如何讓剩下的權利。
基本上:execvp
想要一個char
命令和一個指向數組的指針和所有參數(我希望這部分是正確的)。
我不知道怎麼填*parameters
。
恐怕答案是真的很明顯:(
在此先感謝
void read_command(char *com, char **par)
{
string Eingabe = " ";
fprintf(stdout, "$ ");
getline (cin, Eingabe);
strcpy(com, Eingabe.substr(0, Eingabe.find(" ")).c_str());
*par = com;
Eingabe.erase(0, Eingabe.find(" ")+1);
do
{
par++;
strcpy(???, Eingabe.substr(0, Eingabe.find(" ")).c_str());
Eingabe.erase(0, Eingabe.find(" ")+1);
}while();
return;
}
int main()
{
int childPid;
int status;
char command[20];
char *parameters[60];
while(1)
{
read_command(command, parameters);
if((childPid = fork()) == -1)
{
fprintf(stderr, "can't fork\n");
exit(1);
}else if(childPid == 0)
{
execvp(command, parameters);
exit(0);
}else
{
waitpid(childPid, &status, WUNTRACED | WCONTINUED);
}
}
}
1)您的DO-而在read_command缺少的 「而」 表達。 2)你正在混合C++和C風格的字符串操作,對我來說看起來並不直觀。我強烈建議選擇一種風格並堅持下去。 3)拆分串起來,你所希望的方式的操作被稱爲「符號化」 - 嘗試用這個詞搜索。有趣的C函數可能包括strtok和/或strcspn。在C++中,Boost Tokenizer可能會幫助你。 – laughingcoyote
嘿,謝謝你的回答。我將檢查標記化的解決方案,但這不是真正的問題。我的問題不在於字符串的分離,它如何將它們放入char *參數中[60]。 F.e.如果我有一個char,在函數read_command中包含'here',那麼我如何將此char轉換爲char *參數[],以便參數[1] [0]是'h'和[1] [1]會是'e'等等。你的答案 – Soody