AldoBaldo ha scritto:
Guarda, ribadendo che senz'altro ne sai ben più di me (ma mica poco, nè!)
1) "msg" è un'ovvia contrazione di "messaggio"...2) "buff" è un'ovvia contrazione di "buffer"...
Tutto è ovvio.
Tranne quando non lo è.
Cos'è il messaggio? Una stringa? Un payload UDP? Un pezzo di un json?
Buff cosa fa? Cosa c'è dentro? Un file ? Cibo per gatti?
Comunque sia, in una funzione di undici righe è facile capire il senso di tre parametri in croce...
Vabbè, si vede che per te è facile.
Per me non così tanto.
I commenti che hai messo sono del tutto inutili, se i parametri sono autoesplicativi.
In certi casi, ovviamente, non lo sono affatto.
Ma se guardi quanto hai scritto ti renderai conto che fai un papiro per chiarire quello che dovrebbe già esserlo.
4) Chi passasse -10 in un parametro che rappresenta la dimensione di un buffer sarebbe un tipo un po' distratto...
Bhè altrettanto sarebbe "distratto" chi passasse un NULL. O no?
5) Ho provato impostando il compilatore con ISO C90, ISO C99 e ISO C11: in nessuno dei tre standard mi viene accettata strlen_s().
E come mai?
6) if( '\n' == buff[l-1] ) buff[--l] = '\0'; controlla se l'ultimo carattere della stringa è '\n' e, se è così, lo elimina sostituendolo con '\0', con l'effetto (subito registrato in l) di ridurre di un carattere la lunghezza della stringa. Cosa c'è che non va?
Davvero? Non lo avrei mai intuito!
Operazioni di modifica delle stringhe, così, a casaccio, basate su un indice (l) è un ottimo modo per aprire voragini di sicurezza di ogni genere (oltre che a più "normali" bug).
Il discorso non è "fai quel che ti pare", è ovvio che posso fare quel che mi pare. Però in una discussione ci si aspetta di leggere delle argomentazioni. Finché scrivi cose tipo "basta quella strlen() per rendere superfluo leggere il resto" non è che dai molti spunti, senza contare che l'impressione che si ricava leggendo è quella di un tono piuttosto sprezzante.
Il tono è certamente sprezzante, nel senso che è grosso modo come alle prime lezioni d'inglese.
La penna è sul tavolo, la penna è sotto al tavolo.
Dovrei aprire un corsi di 3 mesi su come si scrivono programmi C appena a livello "la penna è sotto il tavolo".
E' palese, o almeno lo è per me, che strlen cerca di fare qualcosa senza sapere cosa riuscirà a fare.
Se, per qualsiasi motivo, non trova uno "zero" può succedere di tutto e di più (compreso, ma dipende dai casi, ritornare perfino un valore negativo, o meglio col bit negativo settato).
Versione breve: ogni volta che si vede strlen (e neppure str
nlen) è già evidente che si tratta della penna sul tavolo o sotto il tavolo.
Come un pò di sprezzo. Con l'accento, non l'apostrofo.
PS ovviamente non apro il pippone su cosa sia una STRINGA, oggi, nel mondo UTF-8, UTF-16 e UTF-32. Quello è a livello "una patata, due patate, tre patate..." (sì, ai miei tempi le filastrocche d'inglese prevedevano di contare... le patate )