C 如何正确转义嵌套的特殊字符
我需要将下面的例句保存为一个名为demo.sh的文件 我在C中使用的代码如下:C 如何正确转义嵌套的特殊字符,c,string,C,String,我需要将下面的例句保存为一个名为demo.sh的文件 我在C中使用的代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { system("sudo bash -c 'printf \"#!/usr/bin/env bash\n\" > /usr/share/applications/demo.sh'"); return 0; } 我可
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
system("sudo bash -c 'printf \"#!/usr/bin/env bash\n\" > /usr/share/applications/demo.sh'");
return 0;
}
我可以把上面四句话中的第一句写进文件。但其他句子包含特殊字符,如单引号、双引号和行尾字符。这很难转义,因为sudo命令需要有两个嵌套的部分,我试图用“和”分别包装它们
我怎样才能逃过这些句子,把它们写进档案里?这将是伟大的,有一些功能,因为实际上该文件是超过4句话,并有许多特殊字符
作为说明,我知道我可以使用C的I/O函数,我想用一个系统命令来编写文件,该命令使用sudo、printf和一行字符串。我不认为这是最好的方法,但你可以使用一个char[]变量作为系统命令,使用sprintf函数在这个变量中拆分和写入命令 这里有一个例子
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char command[128];
/* Generate string */
sprintf(command, "sudo bash -c %s %s bash\n > /usr/share/applications/demo.sh'",
"'printf", "#!/usr/bin/env");
system(command);
return 0;
}
使用系统实际上与在终端中输入这些命令是一样的,不这样做的原因是什么?在测试期间,程序无法写入/usr/share/applications/location,因为它属于root用户。我看到使用sudobash-c的方式正在终端中工作。所以我想把终端移植到C程序中。对于简单的句子来说,它非常棒,但是每当句子包含特殊字符时,它就变得非常复杂。这不是将它移植到C,这只是通过C程序执行相同的bash命令。我可能使用了错误的术语,但你是对的。我正在用C编写一个终端命令文件。谢谢你的提示。我修改了你的代码,但每当我到第二行,它看起来很可怕。我不得不在第二句双引号转义中使用3个反斜杠。sprintfcommand,sudobash-c%s%s>/usr/share/applications/demo.sh',printf,\/usr/bin/env\\nxmessage这是\\\第一句\\\\;我不知道为什么需要3个反斜杠。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char command[128];
/* Generate string */
sprintf(command, "sudo bash -c %s %s bash\n > /usr/share/applications/demo.sh'",
"'printf", "#!/usr/bin/env");
system(command);
return 0;
}