【发布时间】:2015-02-20 06:56:48
【问题描述】:
我正在使用 c++ 编写一个简单的 shell。这是我的代码。它只会在一轮内正常工作,并在 while(1) 循环的第二轮后停止工作。我实际上找到了原因,这是我的char *command 变量会不断增长。比如第一轮我输入ls,那么我的命令就是“ls”。然后我在第二轮输入的任何内容都会添加到 ls,所以如果我再次输入 ls,那么我的命令变量将是 lsls。所以它会阻止我的 shell 正常工作。所以我想知道有没有办法重新初始化我的命令或删除我的命令内容?
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main(){
int i=0;
char c;
char *command;
while (1){
cout<< "#?: -> ";
while (( c = getchar()) != '\n'){
command[i++] = c;}
if (strcmp(command, "exit") == 0){
break;
}
if ( strcmp(command, "date")==0){
system("date");
}
else if ( strcmp(command, "vim")==0){
system("vim");
}
else if ( strcmp(command,"top")==0){
system("top");
}
else if ( strcmp(command,"ps")==0){
system("ps");
}
else if ( strcmp(command,"ls")==0){
system("ls");
}
else if ( strcmp(command,"man")==0){
system("man");
}
for (int j=0;j<100;j++){
command[j]='/0';
}
cout<<command;
//cin>>command;
}
return 0;
}
【问题讨论】:
-
您的
int i = 0;初始化发生在循环之外。所以,i只会增加并且永远不会重置为 0,所以是的,您的命令将一个接一个地附加。现在想想你必须做什么来纠正这个问题。此外,您永远不会为command分配任何内存,因此取消引用它是未定义的行为。 -
这无论如何都行不通。
command只是指向虚空的某个地方。我建议你使用数组。 -
您的标题是 C。您的文本是 C++。你的代码看起来像 C,但你需要一个 C++ 编译器来编译它。选择一种语言并坚持下去。 C 和 C++ 有着根本的不同。