Newsgroup: it.comp.lang.c
Titolo: [OT]Re: Come alloca sta memoria????

 Per l'e-mail rimuovere la frase in maiuscolo e gli underscore.

 controllato) e poi altri simboli senza senso.
Aspe', dovevo leggere con un pochino piů d'attenzione.
A parte che sizeof(puntatore) restituisce le dimensioni di quella 
variabile e non della memoria alla quale punta, prova ad usare 
fgets(), che mette nel buffer il terminatore nullo e si ferma se 
incontra un newline, mentre fread si ferma soltanto se incontra EOF.
Occhio: fgets include anche il '\n' nella stringa, per cui lo dovrai 
togliere:
fgets(FontName, NameLength, fp);
FontName[strlen(FontName)]='\0';
Saluti


 so che legge il numero esatto di byte perch? ho controllato) e poi altri
La stringa  non esiste in  C come tipo nativo. Viene  rappresentata come
array di char,  terminata dal carattere '\0'. Quindi, se  una stringa e`
formata da  N caratteri,  devi allocare  N +  1 byte,  in modo  da poter
mettere anche il terminatore di stringa.
UINT length;
char *str;
FILE *file;
....
/* Suppongo che tu abbia letto correttamente la lunghezza della stringa.
 * Il cast sul valore di ritorno non ci vuole (se quello che scrivi e`
 * codice C) e sizeof(char) == 1 per definizione.
 */
str = malloc(length);
/* Leggo la stringa da file */
fread(str, 1, length, file);
/* Aggiungo il terminatore */
str[lenght] = '\0';
HTH,
Kronos
-- 
Home: 
http://kronoz.cjb.net
Ci sono due cose che l'uomo non puo` nascondere:
essere ubriaco ed essere innamorato.

 FontName[strlen(FontName)]='\0';
fgets  aggiunge  autonomamente  il  terminatore  di  stringa,  cosi`  lo
riscrivi  (inutile,  ma  non  dannoso). Se la  stringa  non  fosse  gia`
terminata  non  potresti  usare  strlen(). Per  rimuovere  un  eventuale
newline devi fare cosi`:
char *p;
...
fgets(FontName, NameLength, fp);
/* Non e` detto che nella stringa ci sia il newline */
if ((p = strchr(FontName, '\n')) != NULL)
        *p = '\0';
ciao,
Kronos
-- 
Home: 
http://kronoz.cjb.net
Se alla sera, dopo una strepitosa vittoria, guardandoti allo
specchio dovessi notare un secondo paio di palle, che il tuo 
cuore non si riempia d'orgoglio, perche` vuol dire che ti 
stanno inculando -- Saggio Cinese

 eventuale newline devi fare cosi`:
Mi auto cito:
"
fgets(), che mette nel buffer il terminatore nullo e si ferma se 
incontra un newline, mentre fread si ferma soltanto se incontra EOF.
Occhio: fgets include anche il '\n' nella stringa, per cui lo dovrai 
togliere:
fgets(FontName, NameLength, fp);
FontName[strlen(FontName)]='\0';
"
Saluti


 FontName[strlen(FontName)]='\0';
Forse mi sono spiegato male... questo non funziona.
Se una  stringa e`  lunga N caratteri,  questi si  troveranno nell'array
nelle posizioni [0, N - 1]. Nella posizione N c'e` il terminatore.
Dovresti scrivere una cosa del genere:
FontName[strlen(FontName) - 1]='\0';
che non  e` comunque  corretta, visto  che non  e` detto  che ci  sia il
newline. Il modo migliore per togliere '\n' e` questo:
char p*;
fgets(FontName, NameLength, fp);
if ((p = strchr(FontName, '\n')) != NULL)
        *p = '\0';
 
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"Di tutte le perversioni sessuali, la castita` e` la piu` strana".
Anatole France

         *p = '\0';
La prossima volta, eviterò di postare di fretta.
Comunque: dato che prima aveva letto la dimensione della stringa, non 
c'è nessun bisogno di cercare:
FontName[NameLengt-1]='\0';


 FontName[NameLengt-1]='\0';
Argh, avevo perso di vista il post originale... se la stringa e` lunga
NameLength caratteri
fgets(FontName, NameLength, fp);
legge al piu` NameLength - 1 caratteri e riserva una posizione per il
terminatore di stringa.
char *FontName = malloc(NameLengt + 1);
fgets(FontName, NameLengt + 1, fp);
in questo  modo il newline  non viene memorizzato nella  stringa (sempre
che NameLength  sia corretto). Una successiva chiamata  ad fgets, pero`,
produrrebbe una  stringa composta solo da  '\n' (visto che non  e` stato
consumato dalla chiamata precedente).
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"L'ottimista pensa che questo sia il migliore dei mondi possibili. 
 Il pessimista sa che e` vero" -- J. Robert Oppenheimer