如何制作一个c++程序,并将使用该目录下的命令行输入和ls ?



我的系统是Ubuntu 20.04。假设我在project目录中,该目录包含以下文件夹/文件:test,hello.txt。我写了下面的程序:-

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
int main(int argc, char* argv[]){
const char* command = "ls" + argv[1];
system(command);
return 0;
}

然后我将test作为程序运行时的第一个参数。我希望它会打印test文件夹中的所有文件和文件夹。但是它给了我一个错误。有人能告诉我,什么是错误和如何解决它?

您在代码中所做的是不正确的,您添加了两个指针,结果显然不是您所期望的。使用std::string。所以你的代码看起来像这样:

#include <iostream>
#include <string>
#include <cstdlib>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
if(argc < 2)
{ 
cerr << "missing cli argumentn";
return -1;
}
auto command = std::string("ls ") + std::string(argv[1]);
system(command.data());
return 0;
}

通常使用system函数是一个不好的做法,所以在你的情况下,我宁愿使用执行任务的功能:显示文件夹中的所有文件。加上你的代码,它看起来像这样:

#include <string>
#include <iostream>
#include <filesystem>
namespace fs = std::filesystem;
int main(int argc, char* argv[])
{
if(argc < 2)
{ 
std::cerr << "missing cli argumentn";
return -1;
}
std::string path = argv[1];
for (const auto & entry : fs::directory_iterator(path))
std::cout << entry.path() << std::endl;
return 0;
}
  1. 不要使用using namespace std。它污染了全局命名空间。使用std::前缀
  2. 不能在c字符串上使用+运算符。使用std::string代替(你正在使用c++,不是吗?)。
  3. 检查所提供的参数的数量:如果是0,那么你的程序将崩溃。
  4. 最好返回system()返回的值
#include <iostream>
#include <string>
#include <cstdlib>
int main(int argc, const char* argv[])
{
if (argc < 2) {
std::cerr << "Specify a foldern";
return 1;
}
std::string command = "ls " + std::string(argv[1]); // Note the space after ls
return system(command.c_str());
}

相关内容

  • 没有找到相关文章

最新更新