Re: Scherzetti informartici [Programmatori C/C++ a me!]
Trovato un altro non meno sottile, (versione semplificata ):
Codice:
char * strAllocator( size_t len, char *pInitValue = NULL )
{
char *pNewStr = new char[len]
if ( NULL != pInitValue )
strcpy( *pNewStr, "null" ); // Enjoy this ;-)
return pNewStr;
}
....
const char* pOriginalString = "Loren ipsum";
void main( void )
{
char* pStringClone = stringAllocator( strlen(pOriginalString), pOriginalString );
if ( NULL != pStringClone )
printf( "\nClone string = %s [%p] ", pOriginalString, pOriginalString );
}
Re: Scherzetti informartici [Programmatori C/C++ a me!]
qua il nerd-o-meter ha sfondato over9000, eh :asd:
Re: Scherzetti informartici [Programmatori C/C++ a me!]
Se ho capito bene, invece di allocare una stringa con il valore passato, crea una stringa contenente "null"
Non mi sembra grave a meno che non ci sia un trick con in puntatori che al momento non mi salta all'occhio :uhm:
Re: Scherzetti informartici [Programmatori C/C++ a me!]
Citazione:
Originariamente Scritto da
gnappinox1
Se ho capito bene, invece di allocare una stringa con il valore passato, crea una stringa contenente "null"
Non mi sembra grave a meno che non ci sia un trick con in puntatori che al momento non mi salta all'occhio :uhm:
essendo un "allocator", in realtà non dovrebbe neanche copiare alcunchè, dovrebbe restituire un puntatore a una stringa di lunghezza tot. :uhm:
se no dovrebbe chiamarsi qualcosa come "strcpy" :uhm: che esiste già :uhm:
piuttosto non capisco l'inizializzazione a NULL di *pInitValue ed il successivo if
Re: Scherzetti informartici [Programmatori C/C++ a me!]
Citazione:
Originariamente Scritto da
gnappinox1
Se ho capito bene, invece di allocare una stringa con il valore passato, crea una stringa contenente "null"
Non mi sembra grave a meno che non ci sia un trick con in puntatori che al momento non mi salta all'occhio :uhm:
La funzione dovrebbe allocare ed eventualmente inizializzare la stringa con quella passata come secondo argomento. Ia gabola e' che tu crei la string ainizializzata e questa in effetti passa il controllo di validita' nel main() poi pero' quando vai a stamparla sorpresa: viene fuori "null" come se il puntatore non fosse valido (nell'esempio sopra viene stampato sia come string a che come puntatore ma nel codice originale non era cosi')..
Citazione:
Originariamente Scritto da
Skywolf
essendo un "allocator", in realtà non dovrebbe neanche copiare alcunchè, dovrebbe restituire un puntatore a una stringa di lunghezza tot. :uhm:
se no dovrebbe chiamarsi qualcosa come "strcpy" :uhm: che esiste già :uhm:
tieni presente che e' un codice che ho scritto in 5 minuti per darvi una idea, non e' il codce reale dove ho trovato il problema.
Citazione:
Originariamente Scritto da
Skywolf
piuttosto non capisco l'inizializzazione a NULL di *pInitValue ed il successivo if
E' un valore di default: in C++ posso specificare un valore di default per gli argomenti di una funzione, in tal modo posso ometterli. In pratica cosi' facendo, se non devo inizializzare la stringa ma solo allocarla, posso chiamare strAllocator() passandogli solo la lunghezza:
Codice:
strAllocator( 20 ) // Equivale a strAllocator( 20, NULL ).
l'if all'interno serve appunto a capire se oltre allocare devo anche inizializzare usando appunto strcpy().
Re: Scherzetti informatici [Programmatori C/C++ a me!]
Sono arrugginito con il C, ma se si usa printf, con un puntatore NULL, stampa proprio 'null'? :uhm:
Re: Scherzetti informatici [Programmatori C/C++ a me!]
Citazione:
Originariamente Scritto da
Aleph
Sono arrugginito con il C, ma se si usa printf, con un puntatore NULL, stampa proprio 'null'? :uhm:
Ni. asd
Cioè mi spiego [ometto i cast a const char*] .
printf(NULL); fa bum
printf("%s", NULL); dipende dallo standard ISO Cxx, se non erro
Più xx si avvicina agli anni '70 e più è probabile faccia bum.
O forse no. Boh.
Re: Scherzetti informartici [Programmatori C/C++ a me!]
Citazione:
Originariamente Scritto da
LordOrion
Fixed.
E non e' un dettaglio :nono:
si parla di booleani :caffe:
quando mi aspetto un bool in c testo per 1 e 0 :caffe:
e se è una roba al di fuori vado di exit(-1) altroché :caffe:
che cazzo siamo in php che null == 0 == "" ? :caffe:
Re: Scherzetti informartici [Programmatori C/C++ a me!]
Non ho mai usato il c++ sul lavoro, che differenza fa scrivere NULL anziché 0?
È solo una convenzione o il compilatore potrebbe dare risultati diversi?
Re: Scherzetti informartici [Programmatori C/C++ a me!]
Citazione:
Originariamente Scritto da
TizN
Non ho mai usato il c++ sul lavoro, che differenza fa scrivere NULL anziché 0?
È solo una convenzione o il compilatore potrebbe dare risultati diversi?
Le leggende dicono che NULL potrebbe essere diverso da 0 su qualche antiqua piattaforma pre-diluvio.
Tipo 0x80000000 o roba così.
Re: Scherzetti informartici [Programmatori C/C++ a me!]
:asd:
Ok, ma quindi con tutte queste belle sorprese nel codice, come cazzarola vi funzionano i programmi ????
Re: Scherzetti informartici [Programmatori C/C++ a me!]
Citazione:
Originariamente Scritto da
Mad_One
si parla di booleani :caffe:
quando mi aspetto un bool in c testo per 1 e 0 :caffe:
e se è una roba al di fuori vado di exit(-1) altroché :caffe:
che cazzo siamo in php che null == 0 == "" ? :caffe:
TI ricordo che in C (Ansi-C) il tipo bool non esiste. Il linguaggio considera "falso" il valore 0 e "vero" tutti i valori diversi da zero (inclusi i negativi). Sembra un dettaglio ma non lo e': La libreria standard definisce le macro TRUE e FALSE ma vano usate con attenzione, specie nel caso di confronti con TRUE.
Citazione:
Originariamente Scritto da
koba44
Ni. asd
Cioè mi spiego [ometto i cast a const char*] .
printf(NULL); fa bum
printf("%s", NULL); dipende dallo standard ISO Cxx, se non erro
Più xx si avvicina agli anni '70 e più è probabile faccia bum.
O forse no. Boh.
Dipende dalla libreria C/C++ che vai a linkare. La versioni "debug" moderne ti fanno il favore di stampare "null" o "null string" se fai una cosa tipo questa:
Codice:
char *string = NULL;
printf ("La stringa vale: [%s]", string );
Citazione:
Originariamente Scritto da
TizN
Non ho mai usato il c++ sul lavoro, che differenza fa scrivere NULL anziché 0?
È solo una convenzione o il compilatore potrebbe dare risultati diversi?
come TRUE e FALSE, NULL e' in genere una macro del compilatore:
Codice:
#define NULL 0 // in C (Ansi)
#define NULL ((void *)0) // in C++ (x98 - x10)
Quindi usare 0 o NULL non cambia nulla, eccetto che il codice e' piu' leggibile se usi NULL.
Da C++ x11 in poi e' stata introdotta la keyword nullptr che e un vero e proprio valore di tipo nullptr_t.
Citazione:
Originariamente Scritto da
koba44
Le leggende dicono che NULL potrebbe essere diverso da 0 su qualche antiqua piattaforma pre-diluvio.
Tipo 0x80000000 o roba così.
:bua: vero, ma per fortuna quei sistemi oramai sono solo (brutti) ricordi lontani.
Citazione:
Originariamente Scritto da
gnappinox1
:asd:
Ok, ma quindi con tutte queste belle sorprese nel codice, come cazzarola vi funzionano i programmi ????
Infatti quel codice non funzionava :asd:
Re: Scherzetti informatici [Programmatori C/C++ a me!]
Vabbo mi tengo stretto Java, che ok sarà il COBOL del 21esimo secolo ma figa, almeno non devo stare lì a controllare che valore ha NULL questa settimana
Re: Scherzetti informatici [Programmatori C/C++ a me!]
Citazione:
Originariamente Scritto da
Aleph
Vabbo mi tengo stretto Java, che ok sarà il COBOL del 21esimo secolo ma figa, almeno non devo stare lì a controllare che valore ha NULL questa settimana
No, devi solo catchare i NullPointerExceptions ogni 2 righe e sei a posto
Re: Scherzetti informatici [Programmatori C/C++ a me!]
Citazione:
Originariamente Scritto da
Mdk
No, devi solo catchare i NullPointerExceptions ogni 2 righe e sei a posto
:rotfl:
Re: Scherzetti informatici [Programmatori C/C++ a me!]
:rotfl:
Inviato dal mio p9 lite utilizzando Tapatalk
Re: Scherzetti informartici [Programmatori C/C++ a me!]
Ma c'è lavoro in c++ in italia?
Un mio ex compagno di scuola ha trovato solo a milano qualcosa di degno :uhm:
Qui in veneto nada, solo java, cobol e roba web/mobile.
Re: Scherzetti informartici [Programmatori C/C++ a me!]
Citazione:
Originariamente Scritto da
LordOrion
TI ricordo che in C (Ansi-C) il tipo bool non esiste. Il linguaggio considera "falso" il valore 0 e "vero" tutti i valori diversi da zero (inclusi i negativi). Sembra un dettaglio ma non lo e': La libreria standard definisce le macro TRUE e FALSE ma vano usate con attenzione, specie nel caso di confronti con TRUE.
non esisterà nel linguaggio ma nella tua testa si spera di sì, così come la comprensione del testo :caffe:
ergo, se mi aspetto un booleano in C controllo 1 e 0. :caffe:
se c'è un valore a cazzo come 452, c'è un problema :caffe:
Re: Scherzetti informatici [Programmatori C/C++ a me!]
Citazione:
Originariamente Scritto da
Mdk
No, devi solo catchare i NullPointerExceptions ogni 2 righe e sei a posto
"Ma Java non ha i puntatori!!1!" :eek: (cit.)
Re: Scherzetti informartici [Programmatori C/C++ a me!]
Citazione:
Originariamente Scritto da
gnappinox1
:asd:
Ok, ma quindi con tutte queste belle sorprese nel codice, come cazzarola vi funzionano i programmi ????
http://catb.org/jargon/html/magic-story.html
Esempio pratico (suppongo, non letto):
So I just had a "magic"/"more magic" moment today.
http://forums.xkcd.com/viewtopic.php?t=53960