È definito strlen(const char *s)
quando s
non è terminato da null e, in caso affermativo, cosa restituisce?strlen() su stringa di caratteri non terminata da null?
risposta
No, non è definito. Potrebbe verificarsi una violazione di accesso alla memoria, poiché continuerà a contare fino a raggiungere il primo byte di memoria il cui valore è 0.
Può anche far demoneggiare i demoni. http://catb.org/jargon/html/N/nasal-demons.html –
Questo spiega le mie narici doloranti. –
Restituirà il numero di caratteri rilevati prima che venga trovato '\ 0'.
....... oppure no. – alk
Non è definito. Provoca un comportamento indefinito che significa che tutto può accadere, molto probabilmente il tuo programma si bloccherà.
È sempre definito.
Restituisce la lunghezza della "stringa" finché non raggiunge un byte con un valore null. Cattiva idea perché ciò può causare un overflow del buffer.
No, non è definito. Una volta che si inizia a superare lo spazio che è stato allocato per la stringa, tramite malloc o stack/heap, i risultati sono rigorosamente indefiniti. Correzione –
Dalla serie C99:
La funzione strlen restituisce il numero di caratteri che precedono il terminazione carattere nullo.
Se non è presente un carattere null, il risultato non è definito.
Non proprio, e causerà bad things.
strlen() funziona solo (fa qualcosa di utile) su stringhe con terminazione null; otterrai un risultato completamente indefinito se passi in qualcosa di diverso da quello. Se sei fortunato, non causerà un crash :)
, se è fortunato si bloccherà. Non vorresti che questo tipo di errore passasse inosservato :-P. –
Se la stringa non è terminata NUL, la funzione continuerà a cercare finché non la trova.
Se sei fortunato, questo causerà l'arresto anomalo del programma.
Se non siete fortunati, otterrete una lunghezza maggiore del previsto, con molti valori "inattesi".
man 3 strcspn
size_t strcspn (const char * s, const char * reject);
Una lunghezza di due punti delimitati da corde:
size_t len = strcspn(str, ":");
Una lunghezza di delimitati da virgole stringhe:
size_t len = strcspn(str, ",");
Una lunghezza di tab delimitato da corde:
size_t len = strcspn(str, "\t");
- 1. Ottenere la stringa terminata null da System.Text.Encoding.Unicode.GetString
- 2. C++, boost asio, riceve stringa terminata da null
- 3. Costante stringa non terminata
- 4. Strlen su una stringa con valori non inizializzati con comportamento non definito?
- 5. Esiste comunque una stringa null terminata in Go?
- 6. Newtonsoft.Json.JsonReaderException: stringa non terminata. Previsto delimitatore
- 7. strlen() funzione PHP dando la lunghezza sbagliata di caratteri Unicode
- 8. Org.json.JSONException: stringa non terminata al carattere 1834
- 9. Utilizzo di printf con una stringa terminata non nulla
- 10. strlen che non fornisce la lunghezza corretta della stringa C
- 11. Come si stampa una stringa non terminata con null utilizzando printf?
- 12. PHP - iterare su caratteri stringa
- 13. Scrittura su stdout usando l'array di caratteri (non terminato con null) c/C++
- 14. strlen() restituisce il conteggio delle stringhe con il terminatore null
- 15. Ubicazione del terminatore null dell'array di caratteri C++
- 16. Estrazione caratteri da stringa
- 17. non passando null stringa terminata a printf risultati in valore imprevisto
- 18. Errore di sintassi costante della stringa non terminata MVC3
- 19. L'utilizzo di strlen() nella condizione del ciclo è più lento del semplice controllo del carattere null?
- 20. strlen, mb_strlen, quale usare?
- 21. Converti NULL nella stringa vuota - Conversione non riuscita durante la conversione da una stringa di caratteri nell'identificativo univoco
- 22. Taglia caratteri da una stringa
- 23. Rimozione di due caratteri da una stringa
- 24. Rimuovere caratteri da una stringa
- 25. Errore di riferimento entità non terminata
- 26. Rimuovi caratteri da stringa in standard C
- 27. filtro caratteri non alfabetici su stringa in script di shell
- 28. Crea stringa da sequenza di caratteri
- 29. Lettura di una stringa con terminazione null
- 30. Sostituzione di caratteri da stringa uno a stringa due
Chiedetevi: Come dovrebbe strlen() sapere dove finisce la stringa, se non è terminata con null? – DevSolar
Tecnicamente parlando, non esiste una stringa C che non sia NUL-terminata, perché il NUL-Terminator è definito come parte della stringa C :) – fredoverflow