programma i/o c

Pubblicità

gaiapuffo

Utente Attivo
Messaggi
310
Reazioni
7
Punteggio
39
Ciao devo fare una prova per un programma molto + grande dove voglio semplicemente calcolare la dim in byte di una stringa metterla su file e poi prenderla e metterla in un altra stringa...il mio dubbio è questo per calolare la dim in byte uso strlen(stringa)*sizeof(*stringa); in questo mi conta tutti i caratteri ma non il carattere /0 che credo venga messo in automatico quando faccio *stringa="ciao" quando vado a mettere la stringa nel file devo anche mettere tale carattere?quindi dovrei fare strlen(stringa)*sizeof(*stringa)+1?oppure non serve?

IL PROBLEMA CMQ DA ERRORE PERCHE QUANDO STAMPA MI STAMPA UN QUADRATINO SPASTICO CON DEI NUMERI E NON LA STRINGA dove sbaglio?





int main(){
int i;
char *stringa="ciao";
i=open("input.txt",O_WRONLY);
int byte=strlen(stringa)*sizeof(*stringa);
write(i,stringa,byte);
close(i);
i=open("input.txt",O_RDONLY);
char *stringa2;
read(i,stringa2,byte);
close(i);
printf("STAMPA");
printf("\n");
printf("%s\n",stringa2);

}
 
non hai allocato memoria per la stringa.
char *stringa dichiara un puntatore ad una zona di memoria, ma se questa memoria non è allocata, spuntano i caratteri strani.
quindi:
- o dichiari direttamente un array (stringa[10]) o allochi memoria (stringa = malloc((sizeof(char)*10)));
- se usi la malloc, è buona norma poi usare la free() e la realloc();
- per la dimensione, le system call read e write restituiscono il numero di byte letti/scritti, quindi non hai bisogno di calcolarli
- nella open, ti conviende dare i permessi di lettura, scrittura, quindi esempio open(nomefile,o_WRONLY, 0666);
- perchè usi 2 stringhe? usane una sola, tanto i caratteri vengono sovrascritti
- write e read lavorano su buffer, ma visto che in c int e char hanno dimensione di un byte, come dimensione puoi passare anche solo strlen(stringa)

Spero di averti chiarito le idee
 
buongiorno, scusa, ma sono nuova qui e ho formattato il mio pc ma non ho i drivers, qualcuno sa come aiutarmi? non funziona audio, video ecc
 
Ci sono vari errori in quel programma. Innanzitutto

Codice:
[COLOR=#333333]open("input.txt",O_WRONLY)[/COLOR]


funziona solo se il file input.txt esiste già, se non c'è non prova nemmeno a crearlo...inoltre mancano i permessi...dev'essere

Codice:
open("input.txt",O_WRONLY | O_CREAT, 0666)

l'altro problema è non aver allocato la memoria per il puntatore stringa2...dev'essere

Codice:
char *stringa2 = malloc(xxxxx);

e siccome sul file input.txt la stringa non è null-terminated, devi aggiungere tu lo zero, ad esempio metti a zero tutta stringa2
Codice:
memset(stringa2, 0, xxxxx);

infine sizeof(*stringa) non serve a nulla, perchè char ha sempre dimensione 1

 
Pubblicità
Pubblicità
Indietro
Top