为什么此cgi脚本不起作用,但是在/ var / www / cgi-bin /中执行时,它可以作为独立程序完美运行?

时间:2018-11-26 20:21:25

标签: c apache cgi

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char *cognome=NULL;
    char *nome=NULL;   
    char *email=NULL;
    char *password=NULL;
    char *password2=NULL;
    FILE *file_utenti=NULL;
    file_utenti=fopen("Utenti.dat","a+");
    struct utente 
    {
        char cognome[25];
        char nome[25];
        char email[80];
        char password[64];
        char password2[64];
    };
    struct utente Utente;
    file_utenti=fopen("Utenti.dat","r"); 
    if(file_utenti!=NULL)
    printf("%s\n","File aperto correttamente in lettura");
    else
    printf("%s\n","Impossibile leggere sul file utenti");
    while(fread(&Utente, sizeof(Utente), 1, file_utenti))
    {
        printf("%s\t",Utente.cognome);
        printf("%s\t",Utente.nome);
        printf("%s\t",Utente.email);
        printf("%s\t",Utente.password);
        printf("%s\t",Utente.password2);
        printf("\n");
    }

    fclose(file_utenti);
    return 0; 
}

如果我将其作为cgi脚本运行,则不会输入while,但是如果我在/ var / www / cgi-bin /目录中运行它,则可以完美运行。它打开文件,打印所有记录,然后退出 当然,我在cgi脚本中使用了html标记。我的意思是,我用一个表格来显示文件中的数据 但是它只写标签表

1 个答案:

答案 0 :(得分:0)

以下建议的代码:

  1. 干净地编译
  2. 执行所需的功能
  3. 在问题注释中包含建议的修改
  4. 包括头文件中那些未在代码中使用的头文件是一种不良的编程习惯。即建议删除以下语句:#include <string.h>

现在,建议的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{  
    struct utente 
    {
        char cognome[25];
        char nome[25];
        char email[80];
        char password[64];
        char password2[64];
    };
    struct utente Utente;

    FILE *file_utenti=fopen("Utenti.dat","r"); 

    if( file_utenti )
        printf("%s\n","File aperto correttamente in lettura");

    else
    { // fopoen failed
        perror("Impossibile leggere sul file utenti");
        exit( EXIT_FAILURE );
    }

    while(fread( &Utente, sizeof(Utente), 1, file_utenti) )
    {
        printf("%s\t",Utente.cognome);
        printf("%s\t",Utente.nome);
        printf("%s\t",Utente.email);
        printf("%s\t",Utente.password);
        printf("%s\t",Utente.password2);
        printf("\n");
    }

    fclose(file_utenti);
    return 0; 
}

但是,该问题无法明确每个字符串是否通过NUL字节终止。如果未以NUL字节终止,则代码将输出垃圾。