在C中将变量传递给系统函数

Ana*_*ana 2 c linux system input function

我有这个C代码:

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

int main()
{
    int a;

    printf("Please enter a number:\n");
    scanf("%d",&a);
    printf("Your number is: %d\n",a);
    system("echo %d",a);
}
Run Code Online (Sandbox Code Playgroud)

我对最后一个命令,system()函数以及为什么我无法打印我的变量感兴趣,就像我打印它一样printf().我希望能够向用户询问一些输入,让我们说一个字符串,然后将其传递给系统函数.

实际例子:

询问用户文件夹名称

system("mkdir %s", FolderName);
Run Code Online (Sandbox Code Playgroud)

先感谢您!:)

Ôre*_*rel 8

使用 snprintf

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

int main()                                                                     
{                                                                              
    int a;                                                                     
    char buf[BUFSIZ];                                                          

    printf("Please enter a number:\n");                                        
    scanf("%d",&a);                                                            
    printf("Your number is: %d\n",a);                                          
    snprintf(buf, sizeof(buf), "echo %d",a);                                   
    system(buf);                                                               
}  
Run Code Online (Sandbox Code Playgroud)


Wer*_*nze 5

system,与printf不接受多个参数不同,它只接受一个参数,a const char *command。因此,您需要首先在内存中构建完整的命令字符串,然后将其传递给系统。

一个例子是:

char buf[32];
sprintf(buf, "echo %d", a);
system(buf);
Run Code Online (Sandbox Code Playgroud)

您需要注意不要向 buf 中写入的字符多于 buf 的空间。您可能需要阅读手册页以snprintf更安全的方式重写代码。

另外:如果你的代码确实编译过,那么请使用更高的警告级别进行编译。至少这会警告您正在使用比应有的参数更多的参数调用系统。