salve,
cercando sul web ho trovato solo la funzione atoi, ma per il compilatore sembra non esistere (per il man di linux uguale)
il problema è scrivere un intero in un file con la syscall write..
salve,
cercando sul web ho trovato solo la funzione atoi, ma per il compilatore sembra non esistere (per il man di linux uguale)
il problema è scrivere un intero in un file con la syscall write..
Precisamente, cosa devi fare?
Devi scrivere proprio un intero su un file o devi prima convertire questo intero in un carattere e poi scriverlo sul file? Le cose sono leggermente diverse... spiega meglio il problema.
every day above ground is a good one
il problema è scrivere un intero su file come ho precisato dopo, la mia soluzione ipotizzata è convertire intero in stringa..ho un pò incasinato le richiesteOriginariamente inviato da YuYevon
Precisamente, cosa devi fare?
Devi scrivere proprio un intero su un file o devi prima convertire questo intero in un carattere e poi scriverlo sul file? Le cose sono leggermente diverse... spiega meglio il problema.![]()
Beh come ti dicevo le cose sono diverse. Se ho ben capito, quello che vuoi fare tu è che se hai il numero 5 (cioè dichiarato proprio come int, short o quello che è) vuoi scrivere 5 nel file, cioè vuoi leggere 5 quando poi apri il file con un editor di testo... dico bene? Te lo chiedo perché se volessi scrivere quel 5 proprio come intero (e non come carattere!) nel file, aprendo poi quest'ultimo con un editor di testo non leggeresti il carattere 5 ma i caratteri ASCII corrispondenti ai byte che costituiscono il numero 5, ovviamente se questi sono stampabili.
In ogni caso, se il tuo problema è convertire un numero in stringa e non hai atoi, puoi sempre ricorrere a ssprintf() o per megio dire a snprintf()
http://www.cplusplus.com/reference/c...stdio/sprintf/
http://digilander.libero.it/uzappi/C...ni/printf.html
every day above ground is a good one
Al di là del fatto che "atoi" fa esattamente il contrario di quello che stai chiedendo (ovvero, converte una stringa in un intero: "123" -> 123), la funzione che ti serve è l'esatto opposto: itoa(), che converte un intero in stringa (123 -> "123").
Cercando con goole saltano fuori milioni di risultati. Uno su tutti: http://www.cplusplus.com/reference/c.../cstdlib/itoa/
Puoi anche usare la funzione sprintf() (anche qui, google aiuta).
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
E' vero, ma iota() non è standard ANSI e molti compilatori potrebbero non supportarla (comunque probabilmente intendeva dire proprio iota() e non atoi()... boh)Originariamente inviato da LeleFT
Al di là del fatto che "atoi" fa esattamente il contrario di quello che stai chiedendo (ovvero, converte una stringa in un intero: "123" -> 123), la funzione che ti serve è l'esatto opposto: itoa(), che converte un intero in stringa (123 -> "123").
Cercando con goole saltano fuori milioni di risultati. Uno su tutti: http://www.cplusplus.com/reference/c.../cstdlib/itoa/
è decisamente la soluzione migliore, e sarebbe ancora meglio usare snprintf().Puoi anche usare la funzione sprintf() (anche qui, google aiuta).
every day above ground is a good one
a scanso di equivoci è esattamente questo quello che devo fare, ed il problema della scrittura dell'intero su file che hai spiegato è proprio quello che mi ha orientato verso una funzione di conversione int in string.Originariamente inviato da YuYevon
Se ho ben capito, quello che vuoi fare tu è che se hai il numero 5 (cioè dichiarato proprio come int, short o quello che è) vuoi scrivere 5 nel file, cioè vuoi leggere 5 quando poi apri il file con un editor di testo... dico bene? Te lo chiedo perché se volessi scrivere quel 5 proprio come intero (e non come carattere!) nel file, aprendo poi quest'ultimo con un editor di testo non leggeresti il carattere 5 ma i caratteri ASCII corrispondenti ai byte che costituiscono il numero 5, ovviamente se questi sono stampabili.
si, volevo intendere itoa (o iota?) ho confuso le funzioni.
le soluzione che avete dato con scritture bufferizzate sicuramente funzionaranno,
ma il problema è che dell'esercizio che sto facendo vi ho presentato solo questo problema di scrittura, in realtà è molto più ampio..e con scritture bufferizzate ho problemi, per questo devo usare la write pura.
itoa, che sta per Integer TO Ascii, o qualcosa del genere.Originariamente inviato da ant_alt
si, volevo intendere itoa (o iota?) ho confuso le funzioni.
Guarda che la s*printf() ti serve solo a convertire il numero da intero a stringa, poi una volta ottenuta la stringa puoi tranquillamente scriverla nel file con la funzione write().Originariamente inviato da ant_alt
le soluzione che avete dato con scritture bufferizzate sicuramente funzionaranno,
ma il problema è che dell'esercizio che sto facendo vi ho presentato solo questo problema di scrittura, in realtà è molto più ampio..e con scritture bufferizzate ho problemi, per questo devo usare la write pura.
EDIT:codice:#include <stdio.h> int main(void) { int x; char buffer[5]; scanf("%d", &x); snprintf(buffer, 5, "%d", x); printf("Numero convertito in stringa: %s\n", buffer); return 0; }
o forse devi proprio evitare, in generale, istruzioni di input/output bufferizzate? In tal caso mi sa che non ti resta altro che scrivertela di tua mano la funzione per la conversione... che del resto non è difficile.
every day above ground is a good one
alla fine ho risolto con snprintfOriginariamente inviato da YuYevon
codice:#include <stdio.h> int main(void) { int x; char buffer[5]; scanf("%d", &x); snprintf(buffer, 5, "%d", x); printf("Numero convertito in stringa: %s\n", buffer); return 0; }
solo una cosa: qualcuno saprebbe dirmi al volo come evitare di sprecare spazio?
per capirci nell'esempio è buffer[5]..c'è modo di sapere i digit di un intero?
ossia: int a=1200; mi serve una funzione per sapere che sono 4
non che sia un problema allocare 10byte, ma da programmatori capirete che allocare spazio inutile non è proprio simpatico![]()
L'unico modo che mi viene in mente in questo momento per conoscere la lunghezza (in "numero di cifre") di un numero è questo, che poi alla fine è proprio parte dell'algoritmo che si usa per convertire un intero in stringa corrispondente:
dove x è il nostro intero e cnt un contatore, inizializzato ovviamente a 0.codice:do ( x /= 10; cnt++; } while ( x );
Supponiamo di avere il numero 61719.
DIvidendolo per dieci abbiamo che il quoto è 6171 (con resto 9, ma non ci interessa). Dividendolo ancora per 10 abbiamo 617, poi 61, poi 6 e infine 0. Quindi finché x non è 0 ( "while(x)" ) dividiamo x per 10 e lo aggiorniamo. Alla fine, il numero delle divisioni ci darà proprio la lunghezza di x originario.
Questo è un modo, ma ovviamente per non allocare staticamente appena 10 byte di memoria abbiamo fatto un ciclo iterativo... quindi abbiamo risparmiato memoria ma gravato sul tempo di cpu (parole piuttosto grosse per una situazione del genere ^^).
Quello che è certo, però, è che conoscendo esattamente la lunghezza del numero siamo sicuri di allocare tanto spazio quanto ne serve, perché se ad esempio dichiarassimo un buffer statico di 10 elementi e immettessimo un numero di 11 cifre (come long long int ad esempio), le cose non andrebbero bene. Certo basterebbe dichiarare un buffer magari di 20 elementi... insomma è questione di gusti!
every day above ground is a good one