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

5

I have this C code:

#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);

提前感谢你的帮助!:)


5
只需要阅读文档,伙计,系统函数为:int system(const char *command); 你需要将你的命令构建到一个缓冲区中。 - Ôrel
3个回答

12

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

5

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

例如:

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

在向buf写入字符时要注意不能超出buf的空间。你可能需要阅读snprintf的man页面以更安全的方式重写代码。

此外,如果您的代码真的编译过,请使用更高的警告级别进行编译。至少这样可以给您一些警告,提示您调用系统时传递了不应该有的多余参数。


在sprint中似乎有一个打字错误,应该是sprintf。 - diazdeteran
@BorjaDíazdeTerán 谢谢,我编辑了我的答案。下次你可以自己编辑答案,这就是SO的工作方式。 - Werner Henze
很遗憾,我无法编辑您的答案,因为它只有一个字符(奇怪的限制...)。 - diazdeteran

1

谢谢大家在这么短的时间内帮助我。我尝试了Ôrel的代码,它有效。我真的不喜欢不知道发生了什么的事实,所以现在我有东西可以去学习。别担心 - 我不是复制粘贴的人。我喜欢学习发生了什么。感谢提供有用的链接。现在我有一些阅读要做 :) - AnaBanana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接