Newsgroup: it.comp.lang.c
Titolo: Problema con stringhe

Ciao
Ho implementato una semplice struct usata poi in una lista:
typedef struct lnode* ListMsg;
typedef struct lnode {
        char *Info;
        ListMsg Next;
};
Quando vado ad assegnare una stringa all'elemento Info
List->Info="Ciao"
L'elemento List->Info continua ad avere indirizzo 0000, cosě quando vado a
stampare a video tale stringa, nonostante essa contenga effettivamente
"Ciao" non viene stampato nulla... ovvero (null).
Qualcuno sa dirmi perchč e come č risolvibile?
Grazie.



non hai allocato il primo elemento Inode ...
quindi ListMsg=malloc(sizeof(struct Inode));
e poi potrai usarlo correttamente

 wrote in message
news:i8qf4ugdd9l5cr0ai...@4ax.com...

Grazie, ma ho fatto anche quello eppure non va lo stesso...
La funzione di costruzione della lista prima alloca lo spazio necessario,
poi assgne i valori...

 ha scritto:
Io veramente scriverei qualcosa del genere:
[...]
cont char
StringaCiao[] = {"Ciao"};
[...]
List->Info = (char *)StringaCiao;
[...]
StringaCiao è un oggetto costante del programma. Secondo me la
sola stringa "Ciao" racchiusa tra apici non è una variabile, nè un oggetto
del programma, quindi il programma non è in grado di ricavarne l'indirizzo.
Bye. GIGI
--------------------------------
Inviato via 
http://usenet.iol.it
 

 wrote in message
news:151Z25Z152Z183Y...@usenet.iol.it...


 Qualcuno sa dirmi perchè e come è risolvibile?
<CODE>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct node {
               char *s;
               struct node *next;
        } node, *pnode;
void insert_in_list(pnode *pp, const char *s)
{
     if (!*pp)
     {
        *pp = malloc(sizeof **pp);
        (*pp)->next = 0;
        (*pp)->s = malloc(strlen(s)+1);
        strcpy((*pp)->s, s);
     }
     else insert_in_list(&(*pp)->next, s);
}
void print_list(pnode h)
{
     for (; h ; h = h->next)
     {
         printf("[%s]->", h->s);
     }
     printf("NULL\n");
}
int main()
{
    pnode h = 0;
    insert_in_list(&h, "The");
    insert_in_list(&h, "C");
    insert_in_list(&h, "Language");
    insert_in_list(&h, "And");
    insert_in_list(&h, "Its");
    insert_in_list(&h, "Pitfalls");
    print_list(h);
    printf("\nPremi invio per uscire...");
    getchar();
    return 0;
}
</CODE>
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Info = malloc ( 20);
// Idem come sopra con le string copy
free
(List->Info); // rilascio ma memoria


"Ale" 
so cosa intendi e so le emicranie passate, pure io ho avuto complessi di
inferiorità per queste craniate devastanti...ehm vengo al sodo:
char info[80];
il tuo problema come anche il mio...è che abbiamo la memoria smemorata...
fai così ti assicuro che funzia
ciao duido


fai cosě ti assicuro che funzia
Concetto interessante dal punto di vista psicologico.
Sarebbe come dire: ci hanno chiesto di costruire un
grattacielo da 50 piani; mannaggia ! non so come si
costruisce un grattacielo, vabbe', faccio 10 palazzine da 5
piani.  A parte che la richiesta di usare memoria allocata
dinamicamente, molte volte, puo' essere un requisito, c'e'
anche da dire che e' decisamente meglio *capire*, che
ricordare ;)
-- 
Andrea Laforgia - walkietalkie(at)
libero.it
"Meglio cieco che negro" (Stevie Wonder)