Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
In file included from main.c:3:
log.c: In function 'append_error_log':
log.c:12: warning: comparison between pointer and integer
log.c:15: warning: comparison between pointer and integer
prova a sostituire nei due controlli al posto di warn => (*warn)
warn è un puntatore, quando gli dici warn == x (con x=numero qualunque)
tu confronti l'indirizzo di memoria puntato con x
se invece fai (*warn) == x gli dici "ciò che è puntato", ovvero il numero intero che ti interessa
//function return the current time
char *return_time(){
time_t result;
result = time(NULL);
struct tm* brokentime = localtime(&result);
return asctime(brokentime);
}
non capisco perchè dichiari sia il char che l'int come puntatori, non serve dichiararli così
perchè l'int non lo devi modificare, e il char essendo lui stesso un puntatore ad un indirizzo di memoria anche senza essere scritto con * (grande "difetto" del C che poi difetto non è) non serve che li scrivi quindi con l'*.
toglili e togli le parentesi e l'* ai warn. Vedi se gira
@jimmy_page89
Per l'int hai ragione perchè se fa solo dei confronti è inutile passarlo per riferimento. Per il char invece fa bene a mettere l'asterisco, perchè gli passa una stringa, cioè un puntatore a carattere.
@Slack Eater
La butto lì, perchè è un po' che non faccio il C. Tu nel main passi alla funzione appen_error_log una stringa di 4 caratteri. Non è che quando vai a fare la strcpy e ci metti dentro stringhe più lunghe ti provoca il segmentation fault?
Per vedere se è così prova a dichiarare nel main una stringa di 10 caratteri e ci metti dentro "Test". La passi alla funzione e vedi se adesso che è più lunga fa ancora il problema.
You're right, but a warning is often a symptom that something will not work properly at run-time. Especially in this case, he was comparing a pointer to an integer. Since a pointer is an integer (is an address), the compiler gives you only a warning, but at run-time the program will not work very well.