ritornando ai puntatori...
in C++
codice:
#include <iostream>
using namespace std;
int main()
{
char* nome;
nome = new char [20]; // alloco in memoria lo spazio per un puntatore a caratteri di venti elementi.
cout << "Come ti chiami?\n";
cin >> nome;
cout << "Ciao, " << nome << endl;
delete [] nome; // libero la meoria
system("pause");
return 0;
}
in C
codice:
#include <stdio.h>
#include <malloc.h>
int main()
{
char* nome;
nome = (char*) malloc(20*sizeof(char)); /* alloco in memoria lo spazio per un puntatore a caratteri di venti elementi. */
printf("Come ti chiami?\n");
scanf("%s", nome);
printf("Ciao, %s\n", nome);
free(nome); /* libero la memoria */
return 0;
}
Come vedi il problema del "segmentation fault" non è legato al linguaggio... (C++ piuttosto che C)
N.B. con alcuni compilatori il codice postato da Sergio Pedone
potrebbe anche passare, non mandando il programma in fault,
ma è solo per puro caso, provate ad esempio a dichiarare 5 puntatori
e a non allocare la memoria necessaria...
Provate ad esempio questo codice:
codice:
#include <stdio.h>
#include <malloc.h>
int main()
{
char *nome1, *nome2, *nome3, *nome4, *nome5;
//nome = (char*) malloc(20*sizeof(char)); // non alloco nulla
printf("Come ti chiami?\n");
scanf("%s", nome1);
printf("Come ti chiami?\n");
scanf("%s", nome2);
printf("Come ti chiami?\n");
scanf("%s", nome3);
printf("Come ti chiami?\n");
scanf("%s", nome4);
printf("Come ti chiami?\n");
scanf("%s", nome5);
printf("Ciao, %s %s %s %s %s\n", nome1, nome2, nome3, nome4, nome5);
//free(nome);
return 0;
}