Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-12-2005, 16:27   #1
redcloud
Bannato
 
L'Avatar di redcloud
 
Iscritto dal: Feb 2003
Città: Anche Chuck Norris usa Debian e Gnome
Messaggi: 1270
[C] stringa da stdin

Salve, ho bisogno di una funzione che prenda in input (dallo stdin) una stringa senza spazi di lunghezza arbitraria e che la memorizzi automaticamente in un array senza quindi usare malloc apriori (proprio perchè la lunghezza della stringa data in input è variabile). Mi servirebbe standard. Come fareste?
redcloud è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 16:35   #2
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16212
Non e' un problema banale.

Io userei una lista anziche' un array.
I campi degli elementi della lista sarebbero un buffer di un numero fisso di char, e un puntatore all'elemento successivo.
Man mano che leggi un carattere alla volta con getchar, lo inserisci nel buffer dell'elemento corrente: se non bastano, allochi un nuovo elemento della lista e cominci da li'.
Quando hai finito di leggere l'input, calcoli quanto e' lunga la stringa, allochi un array e ci "svuoti" i buffer uno dopo l'altro.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 16:55   #3
redcloud
Bannato
 
L'Avatar di redcloud
 
Iscritto dal: Feb 2003
Città: Anche Chuck Norris usa Debian e Gnome
Messaggi: 1270
Grazie, l'idea è quella ma vorrei sapere se c'è una funzione standard preposta. A quanto pare no.
redcloud è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 17:27   #4
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16212
Quote:
Originariamente inviato da redcloud
Grazie, l'idea è quella ma vorrei sapere se c'è una funzione standard preposta. A quanto pare no.
Anche per quello che ricordo io, nella libreria standard una funzione simile non c'e'.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 17:29   #5
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Quote:
Originariamente inviato da redcloud
Grazie, l'idea è quella ma vorrei sapere se c'è una funzione standard preposta. A quanto pare no.
no...non esistono funzioni standard per la gestione di liste/pile/code...il campo di utilizzo è troppo eterogeneo
comunque mi sembra il metodo migliore...e comunque con una lista è necessario usare l'allocazione dinamica
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 18:02   #6
NA01
Senior Member
 
L'Avatar di NA01
 
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
la getline se trova un puntatore nullo alloca la memoria che serve. ciao!
NA01 è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 18:03   #7
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Quote:
Originariamente inviato da NA01
la getline se trova un puntatore nullo alloca la memoria che serve. ciao!
questa mi mancava grazie...
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 18:04   #8
NA01
Senior Member
 
L'Avatar di NA01
 
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
ah, forse però non è portabile su win....
chi ha windows controlli

ciao
NA01 è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 18:07   #9
NA01
Senior Member
 
L'Avatar di NA01
 
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
confermo. è un'estensione gnu_sources e su dev c++ non compila...

scusate per il falso allarme

ciao!
NA01 è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 18:32   #10
redcloud
Bannato
 
L'Avatar di redcloud
 
Iscritto dal: Feb 2003
Città: Anche Chuck Norris usa Debian e Gnome
Messaggi: 1270
Provate ad eseguire questo codice:

char *a = (char *) malloc(sizeof(char));

scanf("%s", a);

Alloco un puntatore di 1 char e in stdin scrivo una qualsiasi stringa superiore a 1 char.

Nessun errore. E' normale?

EDIT: sto lavorando sotto Debian, probabilmente sotto Windows darebbe errore.

Ultima modifica di redcloud : 09-12-2005 alle 18:47.
redcloud è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 18:47   #11
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Quote:
Originariamente inviato da redcloud
Provate ad eseguire questo codice:

char *a = (char *) malloc(sizeof(char));

scanf("%s", a);

Alloco un puntatore di 1 char e in stdin scrivo una qualsiasi stringa superiore a 1 char.

Nessun errore. E' normale?
si...però sfondi l'array che hai allocato il che comporta problemi durante l'esecuzione se fai uso di altre variabili dinamiche...
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 18:52   #12
redcloud
Bannato
 
L'Avatar di redcloud
 
Iscritto dal: Feb 2003
Città: Anche Chuck Norris usa Debian e Gnome
Messaggi: 1270
Quindi nella tavola delle variabili risulterebbe l'array di 1 char. Una successiva malloc potrebbe tranquillamente sovrascrivere "lo straripamento". Capito. Però un minimo di errore lo potrebbe dare, che palle! Si deve andare a intuizione!
redcloud è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 18:55   #13
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Quote:
Originariamente inviato da redcloud
Quindi nella tavola delle variabili risulterebbe l'array di 1 char. Una successiva malloc potrebbe tranquillamente sovrascrivere "lo straripamento". Capito. Però un minimo di errore lo potrebbe dare, che palle! Si deve andare a intuizione!
e perché dovrebbe?
il C non è così fiscale in questi casi
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 18:59   #14
redcloud
Bannato
 
L'Avatar di redcloud
 
Iscritto dal: Feb 2003
Città: Anche Chuck Norris usa Debian e Gnome
Messaggi: 1270
E' parecchio che non usavo il C ma mi ricordo che quando lavoravo con i for e gli indici degli array, se sforavo, mi andava tranquillamente in Segmentation fault. Cosa che così non avviene più. Mah.
redcloud è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 19:02   #15
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Quote:
Originariamente inviato da redcloud
E' parecchio che non usavo il C ma mi ricordo che quando lavoravo con i for e gli indici degli array, se sforavo, mi andava tranquillamente in Segmentation fault. Cosa che così non avviene più. Mah.
ovvio...quella memoria è gestita staticamente nel DataSegment oppure nell'apposita sezione RDA di ogni sottoprogramma. Quella che tu allochia con malloc risiede nella HEAP e li il controllo non è lo stesso... e poi quando si lavora con i puntatori (seriamente) bisogna sapere dove si va a parare con il prorpio codice
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 09-12-2005, 20:55   #16
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da Ziosilvio
Non e' un problema banale.

Io userei una lista anziche' un array.
I campi degli elementi della lista sarebbero un buffer di un numero fisso di char, e un puntatore all'elemento successivo.
Man mano che leggi un carattere alla volta con getchar, lo inserisci nel buffer dell'elemento corrente: se non bastano, allochi un nuovo elemento della lista e cominci da li'.
Quando hai finito di leggere l'input, calcoli quanto e' lunga la stringa, allochi un array e ci "svuoti" i buffer uno dopo l'altro.
Ziosilvio scusa se dal basso della mia inesperienza mi permetto di chiederti (mi permetto di darti del tu, se non gradisci dimmelo pure che edito... ) chiarimenti, ma il mio dubbio è questo. Secondo la tua idea un nodo della lista conterrebbe un array dichar di lunghezza predefinita, se poi non basta quell'array viene allocato un altro nodo e si continua a memorizzare in quello nuovo. Ma a questo punto visto che comunque le operazioni di allocazione in memoria deve farle lo stesso non conviene direttamente dichiararsi un puntatore ad un vettore di char di lunghezza predefinita e poi eventualmente riallocarlo con dimensione 2*LENGTH?
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 10-12-2005, 11:22   #17
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Quote:
Originariamente inviato da VegetaSSJ5
Ziosilvio scusa se dal basso della mia inesperienza mi permetto di chiederti (mi permetto di darti del tu, se non gradisci dimmelo pure che edito... ) chiarimenti, ma il mio dubbio è questo. Secondo la tua idea un nodo della lista conterrebbe un array dichar di lunghezza predefinita, se poi non basta quell'array viene allocato un altro nodo e si continua a memorizzare in quello nuovo. Ma a questo punto visto che comunque le operazioni di allocazione in memoria deve farle lo stesso non conviene direttamente dichiararsi un puntatore ad un vettore di char di lunghezza predefinita e poi eventualmente riallocarlo con dimensione 2*LENGTH?
secondo me Ziosilvio intendeva qualche cosa tipo questa
Codice:
typedef struct {
    char c;
    nodo* next;
} nodo;
come definizione di dato quando ti serve un nuovo carattere lo allochi senza problemi
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 10-12-2005, 11:37   #18
redcloud
Bannato
 
L'Avatar di redcloud
 
Iscritto dal: Feb 2003
Città: Anche Chuck Norris usa Debian e Gnome
Messaggi: 1270
Magari inserendo un array anzichè un carattere. Allocare una struct per un solo carattere non mi sembra così efficiente. Creare manualmente quindi una sorta di bufferizzazione.
redcloud è offline   Rispondi citando il messaggio o parte di esso
Old 10-12-2005, 11:42   #19
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Quote:
Originariamente inviato da redcloud
Magari inserendo un array anzichè un carattere. Allocare una struct per un solo carattere non mi sembra così efficiente. Creare manualmente quindi una sorta di bufferizzazione.
si ma vuoi mettere la semplicità della funzione/codice che acquisisce in strutture che contengono caratteri invece che contengono array ?
bisogna sempre guardare rapporto efficienza/semplicità
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 10-12-2005, 11:46   #20
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
vi ripeto che non continuo a vedere la convenienza della soluzione con la lista rispetto all'usare direttamente un vettore riallocabile di char. per farvi un esempio è come se doveste entrare in macchina e lo fate entrando dal bagagliaio per poi andarvi a sedere al vostro posto...
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
La capsula SpaceX Dragon CRS-33 ha acces...
La NASA è sempre più vicin...
Crisi delle memorie: ASUS torna al passa...
Le console next-generation potrebbero es...
Gemini cresce ancora: la quota di mercat...
Samsung sfida TSMC: la capacità produtti...
Iliad alza il prezzo della fibra ottica ...
Il prossimo low cost di POCO sarà il più...
The Elder Scrolls VI: ecco le ultime sul...
Ecco i saldi di fine anno Amazon, 34 off...
iPhone Fold: scorte limitate al lancio m...
OpenAI porterà la pubblicità in ChatGPT ...
TSMC aumenterà ancora i prezzi: nel 2026...
Marvel pubblica anche il secondo teaser ...
Nuovo accordo tra xAI e il Pentagono: l'...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:52.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v