#include <cstring>
#include <iostream>
#include <sstream>
#include <string>
#include <unistd.h>
int main()
{
while (true)
{
int argc = 0;
std::istringstream iss;
std::string command;
std::cout << "$> ";
getline(std::cin, command);
iss.str(command);
for (unsigned i = 0; i <= command.length(); i++)
{
if (command[i] == ' ' || command[i] == '\0')
{
argc++;
}
}
std::string arr[argc+1];
for (int i = 0; i < argc; i++)
{
iss >> arr[i];
}
if (!arr[0].compare("quit"))
{
std::cout << "break:" << std::endl;
break;
}
else
{
char* argv[argc+1];
for (int i = 0; i < argc; i++)
{
argv[i] = const_cast<char*>(arr[i].c_str()); //This line is wrong
}
argv[argc] = NULL;
execvp(argv[0], argv);
}
}
return 0;
}
I2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx1bmlzdGQuaD4KaW50IG1haW4oKQp7CndoaWxlICh0cnVlKQp7CiAgICBpbnQgYXJnYyA9IDA7CiAgICBzdGQ6OmlzdHJpbmdzdHJlYW0gaXNzOwogICAgc3RkOjpzdHJpbmcgY29tbWFuZDsKICAgIHN0ZDo6Y291dCA8PCAiJD4gIjsKICAgIGdldGxpbmUoc3RkOjpjaW4sIGNvbW1hbmQpOwogICAgaXNzLnN0cihjb21tYW5kKTsKICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gY29tbWFuZC5sZW5ndGgoKTsgaSsrKQogICAgewogICAgICAgIGlmIChjb21tYW5kW2ldID09ICcgJyB8fCBjb21tYW5kW2ldID09ICdcMCcpCiAgICAgICAgewogICAgICAgICAgICBhcmdjKys7CiAgICAgICAgfQogICAgfQogICAgc3RkOjpzdHJpbmcgYXJyW2FyZ2MrMV07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ2M7IGkrKykKICAgIHsKICAgICAgICBpc3MgPj4gYXJyW2ldOwogICAgfQogICAgaWYgKCFhcnJbMF0uY29tcGFyZSgicXVpdCIpKQogICAgewoJc3RkOjpjb3V0IDw8ICJicmVhazoiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICBicmVhazsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBjaGFyKiBhcmd2W2FyZ2MrMV07CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdjOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBhcmd2W2ldID0gY29uc3RfY2FzdDxjaGFyKj4oYXJyW2ldLmNfc3RyKCkpOyAvL1RoaXMgbGluZSBpcyB3cm9uZwogICAgICAgIH0KICAgICAgICBhcmd2W2FyZ2NdID0gTlVMTDsKICAgICAgICBleGVjdnAoYXJndlswXSwgYXJndik7CiAgICB9Cn0KcmV0dXJuIDA7Cn0=