【问题标题】:Passing variables to system function in C [duplicate]将变量传递给C中的系统函数[重复]
【发布时间】:2015-07-30 02:24:25
【问题描述】:

我有这个 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);
}

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

实例:

询问用户文件夹名称

system("mkdir %s", FolderName);

提前感谢您! :)

【问题讨论】:

  • 只需阅读 doc man 系统:int system(const char *command); 您必须将命令构建到缓冲区中

标签: c linux function input system


【解决方案1】:

使用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);                                                               
}  

【讨论】:

    【解决方案2】:

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

    一个例子是:

    char buf[32];
    sprintf(buf, "echo %d", a);
    system(buf);
    

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

    另外:如果你的代码真的编译了,那么请用更高的警告级别编译。至少这会给你警告,你正在调用系统的参数比你应该的多。

    【讨论】:

    • sprint好像有错别字,是sprintf
    • @BorjaDíazdeTerán 谢谢,我编辑了我的答案。下次,您可以自己编辑答案,这就是 SO 的工作原理。
    • 很遗憾,我无法编辑您的答案,因为它只有一个字符(奇怪的限制......)。
    【解决方案3】:

    System 函数没有像 printf 这样的格式化选项,而是 system 函数将 C 字符串作为参数。

    查看以下网站了解更多信息。

    http://www.tutorialspoint.com/c_standard_library/c_function_system.htm

    【讨论】:

    • 谢谢你们这么短的时间帮助我。我已经尝试过 Ôrel 的代码,它可以工作。我真的不喜欢我不知道发生了什么的事实,所以现在我有一些工作要做。不要害怕 - 我不是复制+粘贴类型的家伙。我喜欢了解会发生什么。感谢您提供有用的链接。我现在有一些阅读要做:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多