我的系统是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;
}
- 不要使用
using namespace std
。它污染了全局命名空间。使用std::
前缀 - 不能在c字符串上使用
+
运算符。使用std::string
代替(你正在使用c++,不是吗?)。 - 检查所提供的参数的数量:如果是
0
,那么你的程序将崩溃。 - 最好返回
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());
}