PDA

Visualizza la versione completa : [C] Warning GCC


matteolandi
25-05-2004, 23:47
ciao a tutti

spero perdonerete la mancanza di indentazione nel codice ma il mio browser non mi permette di editarlo diversamente

#include <stdio.h>
#include <string.h>

#define MAX_GET 1024
#define MAX_KEYS 100
#define MAX_VALUES 100

static char *keys[MAX_KEYS], *values[MAX_VALUES];

int isMethod(char *m);
void getPostParams(void);
void getGetParams(void);

int main(int argc, char *argv[]){
printf("%s\n\n", "Content-Type: text/html");
if(isMethod("GET")) getGetParams();
return(0);
}

int isMethod(char *m){
if(strcmp(getenv("REQUEST_METHOD"), m) != 0) return 0;
return 1;
}

void getGetParams(){
int i, j;
char *query_string, *tmp, *params[100];
query_string = getenv("QUERY_STRING");
tmp = query_string;
for(i = 0; i < MAX_GET; ++i){
if(tmp == NULL) break;
tmp = strtok(tmp, "&");
params[i] = tmp;
tmp = strtok(NULL, "&");
}
for(j = 0; j <= i; ++j){
tmp = params[j];
if(tmp == NULL) break;
tmp = strtok(tmp, "=");
keys[j] = tmp;
tmp = strtok(NULL, "=");
values[j] = tmp;
}
return;
}

quando compilo mi vengono restituiti i seguenti warning

cgilib.c: In function `isMethod':
cgilib.c:21: warning: passing arg 1 of `strcmp' makes pointer from integer withut a cast
cgilib.c: In function `getGetParams':
cgilib.c:28: warning: assignment makes pointer from integer without a cast

ma il programma funziona senza problemi. Non č molto che programmo e vorrei capire come risolverli


grazie
ciao

anx721
26-05-2004, 00:10
Il warning dice che usi un intero come puntatore senza fare il cast esplicitamente, il che potrebbe essere sintomo di un bug.

Cosa restituisce getenv("REQUEST_METHOD")?

Dal messagio sembra che restituisca un intero, e tu lo usi cone un puntatore a char passandolo come parametro della funzione strcmp. Per evitare il warning dovresti castarlo a (char *) esplicitamente, ma č questo quello che vuoi? sei consapevole di cio che fai?

matteolandi
26-05-2004, 00:46
in effetti pensavo che getenv dovesse restituire un puntatore a char ed č proprio questo quello che voglio, perņ evidentemente la funzione restituisce un intero, quindi adesso provo a fare il cast

ti ringrazio

anx721
26-05-2004, 01:00
Secondo me dovresti studiare un po piu attentamente quello che stai facendo comunque, non dovrebbe essere il compilatore a dirti di fare il cast, e se non l'avevi gia pensato significa che qlcosa non va nel codice, poi castare un intero a puntatore a char non ha molto senso.

:ciauz:

Ikitt
26-05-2004, 10:01
Originariamente inviato da matteolandi
in effetti pensavo che getenv dovesse restituire un puntatore a char ed č proprio questo quello che voglio, perņ evidentemente la funzione restituisce un intero

Penso che il problema sia altrove, perche`...



GETENV(3) Linux Programmer's Manual GETENV(3)

NAME
getenv - get an environment variable

SYNOPSIS
#include <stdlib.h>

char *getenv(const char *name);

DESCRIPTION
The getenv() function searches the environment list for a string that
matches the string pointed to by name. The strings are of the form
name = value.

RETURN VALUE
The getenv() function returns a pointer to the value in the environ-
ment, or NULL if there is no match

Loading