如果Apache重新启动,前几个SUBMITS没有问题。但经过多次测试,它开始打印出#34; v"。
的腐败版本int main() {
while (FCGI_Accept() >= 0) {
printf("Content-Type: text/html;\n\n");
int content_len;
content_len = atoi(getenv("CONTENT_LENGTH"));
char v[100];
fread(v,content_len,1,stdin);
printf("%s",v);
FCGI_Finish();
}
return 0;
}
更新:也许我需要" free(v);" ?重置它使用的内存或其他东西。很明显它被存储在某个地方......它需要被清空。
也许这与我在httpd.conf中的fcgi设置有关?
答案 0 :(得分:1)
fread()
不添加空终止符,您需要添加它。
fread(v,content_len,1,stdin);
v[content_len] = '\0';
否则,printf()
将在字符串中打印超出读取内容的未初始化字符。
您还应该确保v
足够大以容纳内容。您可以执行以下操作,而不是对大小进行硬编码:
char v[content_len+1];
您不需要free(v)
,因为free()
只能与malloc()
,calloc()
或realloc()
返回的指针一起使用。