Quote Originariamente inviata da Scara95 Visualizza il messaggio
Il problema è che non hai capito come lavorano i puntatori e come è rappresentata una stringa. I tipi sono messi a caso e i problemi nel codice sono ovvi se comprendi i due aspetti di cui sopra. I punti in cui ci sono errori li ho già esposti, sono quelli e quelli rimangono, tuttavia se non capisci perché stai sbagliando è meglio se ristudi tali parti da un manuale.

Inoltre non dovresti mai sottovalutate un warning, l'unico warning accettabile è quello che ti aspetti prima di compilare la prima volta.
non sottovaluto i warning è solo che i due successivi fanno parte di una porzione di codice non interessante. Per quanto riguarda i puntatori so come funzionano ma sto avendo problemi con le stringhe. Ho cambiato come dici tu ma non va.

codice:
struct Infof
{
    char nome[12];
    char telefono[10];
};
struct albero
{
    struct Infof info;
    struct albero *left;
    struct albero *right;
};
typedef struct albero bst;
bst *crea_nodo(char *name)
{
    bst *nuovo = (bst *)malloc(sizeof(bst));
    puts(&name);
    strcpy(nuovo->info.nome, &name);
    printf("Inserisci numero di telefono: ");
    scanf("%s",nuovo->info.telefono);
    nuovo->left  = NULL;
    nuovo->right = NULL;
    return nuovo;
}
bst *insert(bst *padre, char *nom)
{
    if(padre == NULL)
    {
        return crea_nodo(nom);
    }
    if(strcmp(padre->info.nome, &nom) < 0)
    {
        return insert(padre->left, nom);
    }
    else if (strcmp(padre->info.nome, &nom) > 0)
    {
        return insert(padre->right, nom);
    }
    return padre;
}
void preorder(bst *nodo)
{
    if(nodo != NULL)
        {
            printf("Nome: %s\n", nodo->info.nome);
            printf("Numero di telefono: ");
            printf("%s",nodo->info.telefono);
            puts("");
            preorder(nodo->left);
            preorder(nodo->right);
        }
}
int main()
{
    bst *head = NULL;
    char nome[12];
    printf("Inserisci nome: ");
    gets(nome);
    head = insert(head, &nome);
    short int grado;
    printf("Inserisci il grado della radice: ");
    scanf("%hi", &grado);
    grado = pow(2,grado)-2;
    short int i;
    for(i = 0; i < grado; i++)
    {
        printf("Inserisci nome: ");
        scanf("%s", &nome);
        insert(head, *nome);
    }
    preorder(head);
    return 0;
}