我正在尝试使用rm主例程中的命令删除我已采用命令行参数的文件.该值存储在argv[2]我已尝试使用
system("rm argv[2]");
system("rm ./argv[2]");
system("rm $HOME/argv[2]");
Run Code Online (Sandbox Code Playgroud)
但它给我一个错误的说法
"cannot locate file argv[2]"
文件名存储在argv[2]我检查过的位置.
有人请指导我!
jsc*_*ier 15
为什么不使用remove或unlink命令而不是system("rm ...")?
remove(argv[2]); 要么 unlink(argv[2]);
system("rm ...")必须使用的情况下更新
如果你必须使用system("rm ..."),ZelluX说明你必须从中检索文件名是正确的argv[2].您可以argv[2]使用snprintf或strncpy检索字符串.使用限制输入大小的函数的变体是一个好主意,因为不能保证字符串的长度argv[2].
根据您的应用程序,您可能还需要调用stat来验证字符串argv[2]是否确实是文件,并可能限制文件类型.
例:
此示例调用stat以验证是否argv[2]为常规文件,并调用asprintf为缓冲区动态分配空间.
char *p;
struct stat st;
if (stat(argv[2], &st) == 0 && S_ISREG(st->st_mode))
{
if (asprintf(&p, "rm %s", argv[2]) != -1)
{
system(p);
free(p);
}
}
Run Code Online (Sandbox Code Playgroud)
"rm ./argv [2]"中的"argv [2]"是一个文字字符串,如果要使用存储在argv [2]中的内容,则需要使用strcpy()或sprintf()来连接" rm ./"与字符串存储在argv [2]中.