Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157

    strlen (c) - length /size (c++) o strnlen?

    Buonasera.

    Forse sono in vena di far girare le rotelle di quell'unico, povero neurone che mi rimane... ma sapreste dirmi quale funzione sarebbe bene utilizzare per calcolare la lunghezza di una stringa?

    Ho le seguenti possibilità:

    Includere <string.h> e usare la funzione C, strlen()
    Includere <cstring> e usare sempre la funzione C, adattata al C++, strlen()
    Includere <string> e usare le funzioni C++, length() oppure size()...

    Ma se uso strlen() il compilatore Visual Studio mi dice: << Che stai facendo! DISASTRO! strlen() fa schifo... meglio usare strnlen()! >>

    Qual'è la differenza? Perché hanno definito length(), size() oppure strnlen()? Problemi di sicurezza, tipo overflow, underflow che più flow non si può?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non ho capito il senso di questa domanda ...

    Puoi usare quello che vuoi ... ma qual e' il codice per cui hai quel messaggio? Con quale compilatore? Con quale tipo di progetto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157
    Originariamente inviato da oregon
    Non ho capito il senso di questa domanda ...

    Puoi usare quello che vuoi ... ma qual e' il codice per cui hai quel messaggio? Con quale compilatore? Con quale tipo di progetto?
    La domanda non ha un senso... o meglio, certe sere ho voglia di meditare su cose di cui si potrebbe fare a meno meditare (sono così!)...

    Il compilatore è Visual Studio 2008, che mi indica strlen() come "deprecated"... e mi consiglia di usare strnlen()...

    Ma quello che mi chiedo è: c'era proprio bisogno di scrivere tutte quelle funzioni diverse per calcolare il numero di caratteri di una stringa? Io penso che se l'hanno fatto (dato che coloro che hanno scritto la libreria standard del C++ non sono scemi), un motivo ci sarà! Ed il motivo è proprio ciò che sto cercando.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La strnlen calcola la lunghezza di una stringa "fino ad un massimo" di caratteri indicato.

    Questo serve per "limitare" la funzione in modo che non vada oltre la fine del buffer se, per qualsiasi motivo, il terminatore della stringa non c'e'.

    E' naturalmente un metodo per proteggere il codice da buffer overflow (voluti e non ...) e va usato SOLO se si vuole ottenere questa informazione da un buffer di cui si conosce sicuramente la grandezza massima ma non si sa se il contenuto puo' essere corrotto (come ad esempio un buffer in cui si ricevono dati dalla rete).

    Ma nel caso di normale trattamento delle stringhe, la strlen per il C (o l'equivalente della string per il C++) vanno benissimo.

    Non so in quale occasione ti sia stato evidenziata questo suggerimento da VC++ ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157
    Il warning me lo segnala ogni volta uso strlen(), in qualsiasi progetto (forse perché ho impostato al livello massimo il controllo sugli errori). Comunque, tra strlen(), length() e size() c'è qualche differenza?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh ... non e' necessario questo livello di avviso.

    La strlen la usi con le stringhe del C.

    Le altre sono usate con la classe string del C++ e sono la stessa cosa (la length e' un alias della size)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157
    Buono a sapersi!

    Grazie mille.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.