Newsgroup: it.comp.lang.c
Titolo: dov'è che sbaglio?

C'č qualcuno con l'animo buono che mi dice dov'č che sbaglio.
Al momento della compilazione mi da un fault: access violation, perchč?
---------------------------------------
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(){
    FILE *input;
    char *content_file;
    char rigaletta[512];
    content_file = getenv("CONTENT_FILE");
    input = fopen(content_file, "rt");
    fgets( rigaletta, 512, input );
    printf( "content-type: text/html\n\n" );
    printf( "<html><head>" );
    printf( "<title>pagina generata</title>" );
    printf( "</head><body>" );
    printf( "parametri passati: %s", rigaletta );
    printf( "</body></html>" );
}
sentitamente ringrazio
grma...@libero.it

 Al momento della compilazione mi da un fault: access violation, perchč?
Ho provato e a me funziona. L'unica cosa che posso consigliarti č di
testare il valore restituito da getenv() (se NULL allora la variabile
d'ambiente specificata non č stata definita) e da fopen() (se NULL
allora il file non č stato possibile aprirlo). Inoltre metti qualche
printf() per vedere se nelle variabili c'č proprio il valore che ti
aspetti.
EMG

ho fatto esattamente come mi hai detto, ho visto che fopen() restituiva NULL
indicandomi che il file non veniva aperto, perchè?
perchè non trovava CONTENT_FILE, essendo che io cercavo di compilare dal
client, non trovando la variabile d'ambiente, al puntatore *content_file non
veniva assegnato nessun indirizzo e fopen() non aveva tutti i paramentri per
poter fare il suo dovere e quindi, ho risolto il problema compilando il
sorgente sul server, l'eseguibile è stato generato, ma quando lo invoco mi
dice che:
The specified CGI application misbehaved by not returning a complete set of
HTTP headers. The headers it did return are:
cosa vorrà mai?
non gli basta:
Content type: text/html\n\n
bhoo

cosa vorrà mai?
Il programma non funziona perche' e' sbagliato e produce quindi un
output non corretto.

 getenv() evidentemente non alloca memoria per te.
Non mi pare sia cosě. Credo che getenv() restituisca il puntatore alla
stringa costante dove č memorizzata la variabile d'ambiente richiesta.
EMG

stringa costante dove è memorizzata la variabile d'ambiente richiesta.
Infatti dovrebbe essere cosi'.
Quindi non dipende da questo.
Dall'help del C++ Builder :
Syntax
#include <stdlib.h>
char *getenv(const char *name);
wchar_t *_wgetenv(const wchar_t *name);
Description
Find or delete an environment variable from the system environment.
The environment consists of a series of entries that are of the form
name=string\0.
getenv returns the value of a specified variable. On DOS and OS/2,
name must be uppercase. On other systems, name can be either uppercase
or lowercase. name must not include the equal sign (=). If the
specified environment variable does not exist, getenv returns a NULL
pointer.
To delete the variable from the environment, use getenv("name=").
Note:	Environment entries must not be changed directly. If you want
to change an environment value, you must use putenv.
Return Value
On success, getenv returns the value associated with name. 
If the specified name is not defined in the environment, getenv
returns a NULL pointer.

ho provato a definirlo come vettore ma mi da "LValue required", quindi vuol
dire che getenv() restituisce un puntatore NULL?

dire che getenv() restituisce un puntatore NULL?
No, vuol dire che devi utilizzare strcpy() per copiare il contenuto.