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

Passing "gets" c language function input parameter from an inline python code


如何将 Python 脚本的输出传递给 c 程序的函数?我的 C 程序代码如下:

#include <stdio.h>
int main() 
{
   char name[64];
   printf("%p\n", 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')"

非常感谢。

 python -c 'print "A"*1000'

将打印 A 千次。如果你想将它传递给 C 程序,那么你需要一个大小至少比 1000 大 1 的缓冲区,额外的 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("%s\n", 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')"

要将数据从一个命令的标准输出发送到另一个命令的标准输入,您需要 "pipe":

python -c 'print "A"*1000' | ./a.out

我假设这里的缓冲区溢出是故意的,所以我将省略关于 gets 的不安全性的讲座。

通常,命令行实用程序将从参数数组(main 的参数中的argv)获取其输入,这通常避免了复制数据的需要,因此避免了任何风险如果缓冲区溢出。