View Full Version : [C] Allocazione dinamica di una stringa
Ciao a tutti...
La mia è una domanda piuttosto scema... Dovendo prendere da stdin una stringa e nn sapendo assolutamente nulla sulla sua lunghezza (quindi dovrò usare un char *string), come posso fare ad allocarla dinamicamente?
Io avevo pensato di usare una variabile globale, un vettore di char ad esempio da 1024 caratteri e farci puntare string... Così dovrebbe funzionare, però vorrei sapere se esistono sistemi migliori e se c'è differenza utilizzando gets, scanf oppure <<cin...
Grazie a tutti
Pazzerello
24-02-2005, 11:28
le stringhe in C(presumo si parli di C) si allocano dinamicamente con il malloc, dai un'occhiata qui: http://programmazione.html.it/c/c_31.htm
Grazie Pazzerello! Ma è un caso particolare, negli esempi c'è sempre una quantità definita di char, io invece a priori non so quanti char dovrò leggere e quanto sarà lunga la stringa di conseguenza...
VegetaSSJ5
24-02-2005, 11:41
allora puoi fare proprio come hai detto tu, cioè usando un puntatore a char di (ad esempio) 1024 caratteri, poi inserire i caratteri nel vettore e quindi usare la realloc del vettore (informati sulla realloc) di strlen(vett).
per quanto riguarda le funzioni da utilizzare per l'input in C non puoi utilizzare cin, ma io ti consiglio di utilizzare la fgets in questo modo:
fgets(variabile, 1024, stdin);
dove variabile è dichiarato come
char *variabile;
variabile= (char *) malloc (1024*sizeof(char));
Se invece con un getchar contassi le lettere da stdin e poi allocassi con malloc??? Funzionerebbe lo stesso? Ho provato e sembra di si... Un altra domanda...
Come si fa a leggere sempre da stdin delle stringhe che sono divise su più righe?
VegetaSSJ5
24-02-2005, 17:08
Originariamente inviato da Ancosen
Se invece con un getchar contassi le lettere da stdin e poi allocassi con malloc???
non vedo perchè ti debba complicare la vita in questo modo. tu dai alla variabile una lunghezza massima di 1024 caratteri (anche di più se necessario) e quindi riallochi alla lunghezza esatta della stringa, che è strlen (variabile)
per leggere stringhedivise su più righe potresti usare una variabile temporanea dove memorizzi la stringa letta fino a '\n', poi riversi il contenuto della variabile su file e quindi torni di nuovo a scrivere sulla variabile temporanea.
3nigma666
24-02-2005, 19:27
o molto piu semplicemente puoi fare anke cosi:
char * buffer;
e poi
buffer = "pippo";
VegetaSSJ5
24-02-2005, 19:50
Originariamente inviato da 3nigma666
o molto piu semplicemente puoi fare anke cosi:
char * buffer;
e poi
buffer = "pippo";
non può fare così perchè la stringa deve essere letta da tastiera...
Ziosilvio
25-02-2005, 12:16
In alternativa potresti usare una lista per memorizzare porzioni di stringa man mano che vengano inserite, e poi costruire una stringa a partire dalla lista.
Ma mi sa che la soluzione postata da VegetaSSJ5 è la più semplice.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.