从内联 python 代码传递"gets" c 语言函数输入参数




如何将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')"

相关内容

  • 没有找到相关文章

最新更新