我正在使用带有fastcgi的C程序,它调用以下函数来生成一个逗号分隔数字的输出行:
void print_numbers( double* numbers, int n) {
for (int i=0;i<n;i++)
printf("%s%.4lf",i>0?",":"",numbers[i]);
}
当我从控制台启动程序时,这可以正常工作 - 它会打印一个数字列表,如
280.3689,223.3237,271.8893,241.5658,...
但是,当我使用程序作为fastcgi worker进程并从浏览器调用它时,它只会打印一系列逗号:
,,,,,,,,,,
我见过fcgi re #define
s&#34; printf&#34;通过宏并将呼叫路由到FCGI_printf()
。似乎某些输出被吞噬了#34;在浏览器/ fcgi环境中,一切都可以从控制台正常工作。
另外,当我避开printf()
并使用sprintf()
代替时:
void print_numbers( double* numbers, int n) {
char s[20],t[500];
*t = '\0';
for (int i=0;i<n;i++) {
sprintf(s,"%s%.4lf",i>0?",":"",numbers[i]);
strcat(t,s);
}
printf(t);
}
然后,一切正常,也在浏览器中,我得到以逗号分隔的列表。但我想确保我可以在我的fcgi程序中使用printf()
及其所有功能!
有什么想法吗?这是一个已知的问题吗? (我从http://www.fastcgi.com下载的fcgi-2.4.1-SNAP-0311112127
处理Ubuntu 14.04
已修改:
使用一点C测试程序很容易重现问题。我把它放在要点上: https://gist.github.com/rplantiko/18e8e859175f93454550