我正在尝试通过我的程序执行UNIX命令,该命令最多可处理4个参数,为什么会产生seg错误或其他错误?
using namespace std;
int main() {
char buffer[255];
cin >> buffer;
char* firstPtr;
char* secondPtr;
char* thirdPtr;
char* fourthPtr;
firstPtr = strtok(buffer, " ");
secondPtr = strtok(NULL, " ");
thirdPtr = strtok(NULL, " ");
fourthPtr = strtok(NULL, " ");
execlp(firstPtr, secondPtr);
return 0;
}
答案 0 :(得分:2)
崩溃是因为buffer
溢出。
尝试使用std::cin.getline(buffer, sizeof(buffer))
代替std::cin >> buffer
另请注意,strtok
可能会返回NULL
,因此请务必处理它。
答案 1 :(得分:1)
我认为你应该使用
char buffer[255];
cin.getline(buffer, 255);
否则你的第二,第三和第四指针将为空。
答案 2 :(得分:1)
如果您检查execlp
的{{3}},您会注意到第一个参数(方法的第二个参数,arg0
参数)是必需的,另外您可以通过可变参数传递给函数的任何其他参数 - 并且在文本中也提到了
参数列表必须以NULL指针终止。
第一个参数(在你的情况下是secondPtr)应该是可执行文件的名称;所以你通过在这里传递NULL来违反惯例(因为其他人已经指出了cin >>
)。
但另外,你最后还缺少至少一个需要NULL
的参数。
因此,强烈建议对手册页进行研究!