我的C程序代码:
#include <stdio.h>
int main(void) {
printf("Content-Type: text/plain;charset=us-ascii\n\n");
printf("Hello world\n\n");
return 0;
}
我使用以下命令编译了几次:
gcc -o first.cgi first.c
gcc first.c -o first.cgi
g++ first.c -o first.cgi
当我在网络中使用first.cgi
时,会出错:
CGI错误
指定的CGI应用程序因未返回完整的HTTP标头集而行为不端。它返回的标题是:
J:\ KKS_Sawdagger \ cgi-bin \ first.cgi第1行无法识别的字符\ x90。
有人可以给我理由吗?
答案 0 :(得分:4)
一种可能性是HTTP要求以CRLF结尾的行("\r\n"
);事实上,使用线路的大多数互联网协议也是如此。
现在,有一些缓解措施可能适用于您的代码。 C标准表示文本流应该在输入时从本地本地行结尾转换为\n
,在输出时从\n
转换为本地本地行结尾。问题是“是stdout
是文本流还是Windows上的二进制流?”这是一个我不知道答案的问题(但“文本”是一个合理的猜测 - 在这种情况下代码应该在Windows上正常工作。)
由于错误消息将问题标识为字节0x90(代码中未显示),因此此处可能还有其他内容。你自己直接运行程序吗?
在Windows上,可执行文件的扩展名不是.exe
吗?可能是cmd.exe
或其他一些命令解释器被赋予你的程序解释为某种类型的脚本,并且它不太喜欢它。 (也就是说,ISTR,Windows上的GCC添加了.exe
后缀,因此编译的实际输出为first.cgi.exe
。)