Supponi di avere una stringa che NON sia null
terminata e che tu conosca la sua dimensione esatta, quindi come puoi stampare quella stringa con printf
in C? Ricordo un tale metodo, ma non riesco a trovare fuori ora ...Utilizzo di printf con una stringa terminata non nulla
risposta
C'è una possibilità con printf, va in questo modo:
printf("%.*s", stringLength, pointerToString);
Non c'è bisogno di copiare nulla, non c'è bisogno di modificare l'originale stringa o buffer.
Ma comunque è pericoloso, qualcuno un giorno stamperà questa stringa con% s – pmod
Sì, è così! – whoi
@Pmod: non necessariamente se il buffer non è esposto al mondo esterno. È anche molto utile stampare semplicemente * parti * di una stringa (che può essere terminata con null, ovviamente). Se vuoi davvero vederlo in azione, dai un'occhiata al proxy SIP OpenSER/Kamailio dove evitano di copiare molto cose grazie a questa tecnica (anche usando sprintf). – DarkDust
#include<string.h>
int main()
{
/*suppose a string str which is not null terminated and n is its length*/
int i;
for(i=0;i<n;i++)
{
printf("%c",str[i]);
}
return 0;
}
Ho modificato il codice, ecco un altro modo:
#include<stdio.h>
int main()
{
printf ("%.5s","fahaduddin");/*if 5 is the number of bytes to be printed and fahaduddin is the string.*/
return 0;
}
Prestazioni pessime a causa di molte letture di byte non necessarie (che vengono con una penalizzazione delle prestazioni se il byte non è su un indirizzo allineato alla parola sulla maggior parte delle CPU) e anche l'analisi e l'analisi della formattazione viene eseguita per ciascun carattere. Non farlo :-) Vedi la mia risposta per la soluzione. – DarkDust
Grazie per aver menzionato –
@DarkDust: solo una macchina patologica penalizza le letture dei byte non allineate ai limiti delle parole. Stai pensando a letture di parole non allineate ai confini delle parole? O qualche antica merda di mips o qualcosa del genere? –
printf("%.*s", length, string)
non funzionerà.
Ciò significa stampare fino a byte di lunghezza O un byte nullo, a seconda di cosa si verifica per primo. Se il tuo array-of-char non terminato da null contiene byte null PRIMA della lunghezza, printf si fermerà su quelli e non continuerà.
È possibile utilizzare un fwrite() allo stdout!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
In questo modo si emette i primi caratteri (numero definito in number_of_chars variabile) in un file, in questo caso per stdout (lo standard output, il vostro schermo)!
Molto utile quando si desidera ispezionare un buffer lungo contenente stringhe e zeri! – Elist
Ecco una spiegazione di come funziona %.*s
e dove è specificato.
Le specifiche di conversione in una stringa di modello printf hanno la forma generale:
% [ param-no $] flags width [ . precision ] type conversion
o
% [ param-no $] flags width . * [ param-no $] type conversion
La seconda forma è per ottenere la precisione dalla lista degli argomenti:
È inoltre possibile specificare una precisione di '*'. Ciò significa che l'argomento successivo nell'elenco degli argomenti (prima del valore effettivo da stampare) viene utilizzato come precisione. Il valore deve essere un int e viene ignorato se è negativo.
- Output conversion syntax nel manuale glibc
Per %s
formattazione di stringhe, di precisione ha un significato speciale:
Una precisione può essere specificato per indicare il numero massimo di caratteri per scrivere; in caso contrario, i caratteri nella stringa fino a non includere il carattere null terminante vengono scritti nel flusso di output.
- nel manuale glibc
Altre varianti utili:
"%*.*s", maxlen, maxlen, val
saranno destro giustificare, l'inserimento di spazi prima;"%-*.*s", maxlen, maxlen, val
verrà giustificato a sinistra.
Se ho capito bene, quanto segue potrebbe riempire l'output e impedire comunque un overflow di stringa? '"% - *. * S ", padding, str_view.size(), str_view.data()' – scx
printf("%.5s", pointerToNonNullTerminatedString);
La lunghezza stringa sarà 5.
- 1. Come si stampa una stringa non terminata con null utilizzando printf?
- 2. Costante stringa non terminata
- 3. non passando null stringa terminata a printf risultati in valore imprevisto
- 4. Newtonsoft.Json.JsonReaderException: stringa non terminata. Previsto delimitatore
- 5. Org.json.JSONException: stringa non terminata al carattere 1834
- 6. Utilizzo di awk printf nel testo urldecode
- 7. Printf non sta stampando nulla per l'output? C++ SDL
- 8. Gamma base per loop sul nulla terminata stringhe
- 9. F # printf stringa
- 10. strlen() su stringa di caratteri non terminata da null?
- 11. Errore di sintassi costante della stringa non terminata MVC3
- 12. Sostituisci stringa nulla con valore nullo
- 13. Perché una stringa non può essere nulla in Go?
- 14. PostgreSQL definizione di funzione in scoiattolo: non terminata stringa quotata con dollari
- 15. x: Immagine Bind con stringa nulla
- 16. Ottenere la stringa terminata null da System.Text.Encoding.Unicode.GetString
- 17. Esiste comunque una stringa null terminata in Go?
- 18. Stringhe e carattere con printf
- 19. Esiste un codice printf "null" che non stampa nulla, usato per saltare un parametro?
- 20. stringa Perchè nulla non è un oggetto stringa
- 21. Interrogazione DynamoDB con Lambda non fa nulla
- 22. Centratura stringhe con printf()
- 23. PostgreSQL NON clausola ILIKE non include stringa nulla Valori
- 24. Errore di riferimento entità non terminata
- 25. Semplice printf con sizeof non funziona affatto
- 26. Utilizzo di Moq.It.IsAny per testare una stringa inizia con qualcosa
- 27. Come impostare il valore di stringa nulla
- 28. Come evitare una virgoletta singola in sql che sta causando la "stringa quotata non terminata correttamente"?
- 29. Perché sprintf() non produce nulla?
- 30. Perl accodamento (s) printf uscita alla stringa
Nel contesto 'C', tutte le stringhe sono nulli terminati. Le matrici di caratteri senza nullo in esse non sono stringhe ... sono matrici di caratteri :) – pmg
possibili duplicati di [Come stampare una stringa non terminata da null usando printf?] (Http://stackoverflow.com/ domande/2137779/how-do-i-print-a-non-null-terminated-string-using-printf) – Justin
https://stackoverflow.com/questions/2239519/is-there-a-way-to-specify -come-molti-caratteri-di-una-stringa-per-stampare-usare-pri- –