从内联 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
)获取其输入,这通常避免了复制数据的需要,因此避免了任何风险如果缓冲区溢出。
如何将 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
)获取其输入,这通常避免了复制数据的需要,因此避免了任何风险如果缓冲区溢出。