Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C变量的值赋给bash变量_C_Linux_Bash - Fatal编程技术网

将C变量的值赋给bash变量

将C变量的值赋给bash变量,c,linux,bash,C,Linux,Bash,我正在用C编写一个程序,该程序也包含bash代码。我需要将C变量的值赋给bash变量。更具体地说,我需要将提供给C程序的参数指定给同一程序中的bash变量 int main( int argc, char **argv) { printf(argv[1]); system("echo $1"); // Here I need to assign argv[1] to bash variable. } 可以使用设置脚本可以访问的环境变量 #include <stdlib.h

我正在用C编写一个程序,该程序也包含bash代码。我需要将C变量的值赋给bash变量。更具体地说,我需要将提供给C程序的参数指定给同一程序中的bash变量

int main( int argc, char **argv)
{
    printf(argv[1]);
    system("echo $1"); // Here I need to assign argv[1] to bash variable.
}
可以使用设置脚本可以访问的环境变量

#include <stdlib.h>

int main(int argc, char **argv) {
    setenv("VAR", argv[1], 1);
    system("echo $VAR");
    return 0;
}
#包括
int main(int argc,字符**argv){
setenv(“VAR”,argv[1],1);
系统(“echo$VAR”);
返回0;
}
您可以使用设置脚本可以访问的环境变量

#include <stdlib.h>

int main(int argc, char **argv) {
    setenv("VAR", argv[1], 1);
    system("echo $VAR");
    return 0;
}
#包括
int main(int argc,字符**argv){
setenv(“VAR”,argv[1],1);
系统(“echo$VAR”);
返回0;
}

创建一个缓冲区,将值写入其中
sprintf(buf,“echo%s”,argv[1])
并在缓冲区上使用system()“bash变量”是什么?如何将这些信息从bash传递到程序?通过命令行(
$。/a.out 42 FOO
),也许?@tommyle2k
sprintf
-这就是您在应用程序中创建漏洞的方式。@MaximeGroushkin我认为这是他最小的问题;)创建缓冲区的可能重复项,将值写入它
sprintf(buf,“echo%s”,argv[1])
并在缓冲区上使用system()“bash变量”是什么?如何将这些信息从bash传递到程序?通过命令行(
$。/a.out 42 FOO
),也许?@tommyle2k
sprintf
-这就是您在应用程序中创建漏洞的方式。@MaximeGroushkin我认为这是他最小的问题;)非常感谢,它解决了我的问题。在bash中不适用于我:$
FOOVAR=3;echo$FOOVAR;echo-e'#include\nin main(void){setenv(“FOOVAR”,“42”,1)}'| gcc-std=c11-pedantic-D#XOPEN#u SOURCE=700-xc-/a、 出去;echo$FOOVAR
输出“3 3”,而不是“3 42”。@pmg,您使用它的方式不对,因为您的shell脚本和c程序中的system()不在同一个会话中,您只需从c程序中执行shell脚本,环境变量便可用于代码中执行的脚本。非常感谢,它解决了我的问题。在bash中对我不起作用:$
FOOVAR=3;echo$FOOVAR;echo-e'#include\nin main(void){setenv(“FOOVAR”,“42”,1)}'| gcc-std=c11-pedantic-D#XOPEN#u SOURCE=700-xc-/a、 出去;echo$FOOVAR
输出“3 3”,而不是“3 42”。@pmg,您使用它的方式不对,因为您的shell脚本和c程序中的system()不在同一个会话中,只需从c程序中执行shell脚本,环境变量就可用于代码中执行的脚本。