Stringa dinamica in c

di il
5 risposte

Stringa dinamica in c

Ciao a tutti la mia domanda è come da topic : come si inserisce un input da tastiera in char*nome.
Nel seguente codice ho provato una soluzione ma mi da errore di segmentazione...
Grazie.

#include <string.h>
#include <stdio.h>
#include <stdlib.h>


struct tavSim {
char *nome;
char tipo;
char *valStr;
int valInt;
};

void inizializzaVoce(struct tavSim*);
void stampaVoce(struct tavSim*);


int main()
{
struct tavSim s;
inizializzaVoce(&s);
stampaVoce(&s);

free(s.nome);
free(s.valStr);


system ("pause");
return 0;

}

void inizializzaVoce (struct tavSim *p) {


char buffer[100];
printf("Inserire nome simbolo : ");
scanf("%s",buffer);
p->nome = (char*)malloc(sizeof(char)*(strlen(buffer)+1));
strcpy(p->nome,buffer);


printf("Inserire tipo: ");
scanf("%c",p->tipo);

switch (p->tipo) {
case 's':
printf("Inserire valore : ");
scanf("%s",buffer);
p->nome = (char*)malloc(sizeof(char)*(strlen(buffer)+1));
strcpy(p->valStr,buffer);

break;
case 'i':
printf("Inserire valore : ");
scanf("%d",p->valInt);


default :
printf("Valore di tipo non corretto");
break;
}
}

void stampaVoce(struct tavSim *p) {
switch (p->tipo) {
case 's':
printf("%s",p->valStr);
break;
case 'i':
printf("%d",p->valInt);
default :
printf("Valore di tipo non corretto");
break;
}
}

5 Risposte

  • Re: Stringa dinamica in c

    Allochi spazio per nome e ci copi i dati in valstr?
    p->nome = (char*)malloc(sizeof(char)*(strlen(buffer)+1));
    strcpy(p->valStr,buffer);
    
  • Re: Stringa dinamica in c

    Hai ragione sky
    L'ho corretto ma va ancora in errore di segmentazione
  • Re: Stringa dinamica in c

    
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    
    struct tavSim {
    char *nome;
    char tipo;
    char *valStr;
    int valInt;
    };
    
    void inizializzaVoce(struct tavSim*);
    void stampaVoce(struct tavSim*);
    
    
    int main()
    {
    	struct tavSim s = {0};
    	inizializzaVoce(&s);
    	stampaVoce(&s);
    
    	free(s.nome);
    	free(s.valStr);
    
    
    	system ("pause");
    	return 0;
    
    }
    
    void inizializzaVoce (struct tavSim *p) 
    {
    
    	char buffer[100];
    	printf("Inserire nome simbolo : ");
    	scanf("%s",buffer);
    	p->nome = (char*)malloc(sizeof(char)*(strlen(buffer)+1));
    	strcpy(p->nome,buffer);
    
    
    	printf("Inserire tipo: ");
    	scanf(" %c",&p->tipo);
    
    	switch (p->tipo) 
    	{
    		case 's':
    			printf("Inserire valore : ");
    			scanf("%s",buffer);
    			p->valStr = (char*)malloc(sizeof(char)*(strlen(buffer)+1));
    			strcpy(p->valStr,buffer);
    		break;
    		case 'i':
    			printf("Inserire valore : ");
    			scanf(" %d",&p->valInt);
    		break;
    		default :
    			printf("Valore di tipo non corretto\n");
    		break;
    	}
    }
    
    void stampaVoce(struct tavSim *p) 
    {
    	switch (p->tipo) 
    	{
    		case 's':
    			printf("%s",p->valStr);
    		break;
    		case 'i':
    			printf("%d",p->valInt);
    		break;
    		default :
    			printf("Valore di tipo non corretto\n");
    		break;
    	}
    }
    
  • Re: Stringa dinamica in c

    Skynet sei stato gentilissimo grazie...come al solito ho mancato le cose più ovvie.

    Spero solo che non diventarai autocosciente.
    (squallida battuta)
  • Re: Stringa dinamica in c

    Non si finisce mai di imparare.
Devi accedere o registrarti per scrivere nel forum
5 risposte