2013-04-29 28 views
5

Mi chiedevo se c'è un modo migliore per stampare un array di interi in c;stampa più interi contemporaneamente allo stesso tempo

Al momento faccio un printf("%d" ,..) per ogni int nel mio array.

Tuttavia, ciò causa una chiamata di sistema per int? (se la mia comprensione è corretta).

Sarebbe meglio convertire l'array int in buffer di stringhe e quindi stampare il buffer in una chiamata.

Posso scrivere il codice per esso se necessario.

Q1. è una buona idea o troppo fastidio per valerne la pena?

Q2. Ci sono delle librerie che implementano una cosa del genere. (Qualunque cosa Google arriva di nuovo a principianti tutorial per gli interi di stampa: s)

Modifica La dimensione della matrice non è noto prima mano.

+0

printf ("% d% d% d% d \ n", arr [0], arr [1], arr [2]) fa una chiamata write() - al massimo - la chiamata di sistema che ti preoccupa. –

+0

@jimmcnamara array è di dimensioni dinamiche .. quindi non posso codificarlo in questo modo. Ho aggiornato la domanda. –

+0

Stavi chiedendo di lavorare attorno a uno scenario di chiamata di sistema "multiplo". Non un workaround di programmazione, IMO. –

risposta

3

Quando si utilizza printf, l'output è già memorizzato nel buffer. La chiamata di sistema viene eseguita solo quando si "svuota" il buffer - esplicitamente chiamando fflush(stdout) o implicitamente stampando \n in una console. Pertanto, il pre-buffering sul lato dell'applicazione renderà il codice più complesso senza alcuna reale differenza nelle prestazioni.

Per quanto riguarda una libreria per aiutarti a scrivere int s in una stringa va, è possibile utilizzare lo stesso <stdio.h> che si sta già utilizzando: allocare un buffer sufficientemente grande per contenere i vostri numeri interi, utilizzare sprintf invece di printf di scrivere a e quindi chiamare printf con il contenuto dell'intero buffer. Ciò ti aiuterà ad evitare il flushing su \n, nel caso decidessi di usarli come separatori nell'output.

+0

grazie. Se è bufferizzato, suppongo di poter usare solo printf. anche se sprintf è una buona idea. –

+0

@OsamaJaved L'unico caso in cui 'sprintf' potrebbe essere utile è se si desidera utilizzare' \ n' come separatore, * e * si desidera scrivere su un flusso di output associato alla console (i flussi di output dei file non vengono scaricati su '\ n' comunque). – dasblinkenlight

+0

Hai omesso gli stream non bufferizzati: lo stdout può essere reso unbuffered, proprio come lo stderr è di default. –

3

No, non causa una chiamata di sistema per int, a meno che non si imposta stdout in modalità senza buffer. Questo è il punto principale di stdio: bufferizzare l'output per te in modo da non doverlo fare da solo. C'è una quantità minima di ulteriore chiamata di overhead per la funzione printf. Se vi trovate a dover maggiori prestazioni, si potrebbe provare qualcosa di simile:

for (i=0; i+4<=N; i+=4) 
    printf("%d %d %d %d ", a[i], a[i+1], a[i+2], a[i+3]); 
for (; i<N; i++) 
    printf("%d ", a[i]); 
+0

se il suo buffer non ho bisogno di preoccuparmi del tutto quindi: D. Grazie –

Problemi correlati