C在shell命令中使用字符串

C在shell命令中使用字符串,c,linux,unix,C,Linux,Unix,您好,我正在尝试通过执行以下操作来执行shell命令“rm-rf test”: #include <stdio.h> #include <stdlib.h> char name[] = "test"; char buffer[64]; int main() { snprintf(buffer,sizeof(buffer),"rm -rf s% s%", name); system(buffer); return 0; }

您好,我正在尝试通过执行以下操作来执行shell命令“rm-rf test”:

#include <stdio.h>
#include <stdlib.h>


char name[] = "test";
char buffer[64];
int main()
{
        snprintf(buffer,sizeof(buffer),"rm -rf s% s%", name);
        system(buffer);
        return 0;
}
#包括
#包括
字符名[]=“测试”;
字符缓冲区[64];
int main()
{
snprintf(buffer,sizeof(buffer),“rm-rfs%s%”,name);
系统(缓冲区);
返回0;
}
它将编译并运行,但不会删除目录


任何帮助都将不胜感激

不要使用
system
运行外部进程,尤其是当您传递的命令行不是常量时。这只会让你的生活变得悲惨。有关正确的方法,请参见
man fork
man exec

\include
#include <stdio.h>
#include <stdlib.h>

char name[] = "test";
char buffer[64];

int main()
{
        snprintf(buffer,sizeof(buffer),"rm -rf %s", name);
        system(buffer);
        return 0;
}
#包括 字符名[]=“测试”; 字符缓冲区[64]; int main() { snprintf(buffer,sizeof(buffer),“rm-rf%s”,name); 系统(缓冲区); 返回0; }

这对我很有用。

你重复了%s两次-应该是
“rm-rf%s”
什么是
s%
?我相信您的意思是
%s
。格式修饰符的形式是%s,而不是s%。使用“rm-rf%s”时,它仍然不会删除测试目录!但是谢谢你在这一点上纠正了我,肯定还有别的问题!这是个很糟糕的主意,而stormCloud的修复方案也无济于事。考虑字符串名称为“代码>测试”/ <代码>时发生的情况。