如何将Python脚本的输出传递给c程序的get函数?我的c程序代码如下:
#include <stdio.h>
int main()
{
char name[64];
printf("%pn", name);
fflush(stdout);
puts("What's your name?");
fflush(stdout);
gets(name);
printf("Hello, %s!n", name);
return 0;
}
我想做的事情如下:
$./a.out "$(python -c 'print "A"*1000')"
非常感谢。
要将数据从一个命令的stdout发送到另一个命令中的stdin,需要一个"管道":
python -c 'print "A"*1000' | ./a.out
我认为这里的缓冲区溢出是故意的,所以我将省略关于gets
的不安全性的讲座。
通常,命令行实用程序将从参数数组(main
的参数中的argv
)获取其输入,这通常避免了复制数据的需要,从而避免了缓冲区溢出时的任何风险。
python -c 'print "A"*1000'
将打印CCD_ 4千次。如果您希望将其传递给C程序,那么您需要一个大小至少比1000
大一的缓冲区,额外的1用于容纳空字符。
#include <stdio.h>
#include <string.h> // for strcpy
int main(int agrc, char* argv[])
// int argc- is for number of arguments
// char* argv[] - argument strings separated by spaced
// each argument can be accessed by argv[1],argv[2] & so on
{
char name[1001]="";
// initialize name to null & 1001 for the reason mentioned above
printf("%sn", name);
// %p specifier is for the pointer,i used %s here for the string
fflush(stdout);
/*
* This part of your code is useless if you wish
* to store the name from the argument.
puts("What's your name?");
fflush(stdout);
gets(name);
*/
strcpy(name,argv[1]); // copying the cmd line argument to name.
printf("Hello, %s!n", name);
return 0;
}
现在像一样运行
$./a.out "$(python -c 'print "A"*1000')"