Supponi di avere una stringa che NON è null
terminata e di conoscere la sua dimensione esatta, quindi come puoi stampare quella stringa con printf
in C? Ricordo un metodo del genere ma non riesco a scoprirlo ora ...
Supponi di avere una stringa che NON è null
terminata e di conoscere la sua dimensione esatta, quindi come puoi stampare quella stringa con printf
in C? Ricordo un metodo del genere ma non riesco a scoprirlo ora ...
Risposte:
C'è una possibilità con printf, funziona così:
printf("%.*s", stringLength, pointerToString);
Non è necessario copiare nulla, non è necessario modificare la stringa o il buffer originale.
printf
anche dopo un ~ decennio ... :)
printf
stamperà fino a 11 caratteri o fino a quando non incontra NULL, a seconda dell'evento che si verifica per primo; nel tuo esempio NULL viene prima. Specificare una lunghezza massima non fa perdere a NULL il significato di "fine stringa" per printf
.
Ecco una spiegazione di come %.*s
funziona 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 serve per ottenere la precisione dall'elenco 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.
- Sintassi di conversione dell'output nel manuale glibc
Per %s
la formattazione delle stringhe, la precisione ha un significato speciale:
È possibile specificare una precisione per indicare il numero massimo di caratteri da scrivere; altrimenti i caratteri nella stringa fino al carattere null di terminazione, ma escluso, vengono scritti nel flusso di output.
- Altre conversioni di output nel manuale di glibc
Altre varianti utili:
"%*.*s", maxlen, maxlen, val
giustificherà a destra, inserendo spazi prima;"%-*.*s", maxlen, maxlen, val
giustificherà a sinistra."%-*.*s", padding, str_view.size(), str_view.data()
Puoi usare fwrite () per stdout!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
In questo modo emetterete i primi caratteri (numero definito nella variabile number_of_chars) in un file, in questo caso in stdout (lo standard output, il vostro schermo)!
printf("%.*s", length, string)
non funzionerà.
Ciò significa stampare FINO A lunghezza byte O un byte nullo, a seconda di quale si verifica per primo. Se il tuo array di caratteri con terminazione non nullo contiene byte nulli PRIMA della lunghezza, printf si fermerà su quelli e non continuerà.
#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;
}
C
contesto, tutte le stringhe sono terminate con null. Gli array di char senza null non sono stringhe ... sono array di char :)