Apache:几个POST后内容被破坏

时间:2017-06-26 18:57:39

标签: c apache

如果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设置有关?

1 个答案:

答案 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()返回的指针一起使用。