gscaparrotti
15-11-2013, 13:35
ciao a tutti, sto facendo un esercizio in cui una frase inserita da tastiera viene memorizzata in un vettore allocato dinamicamente con l'uso di un puntatore.
il programma sembra funzionare correttamente, ma se la frase che si inserisce diventa un po' lunga va in crash, e non ho capito il motivo per cui succede.
qualcuno è in grado di aiutarmi a risolvere questo problema?
vi allego il codice:
#include <stdio.h>
#include <stdlib.h>
#define BUFFER 26
int main() {
int conta_input=0;
int contatore=0;
char carattere;
int dimensione=1;
int verifica=0;
int esecuzione=0;
char *stringa, *buffer, *posteggio;
buffer=(char*)malloc(BUFFER*sizeof(char));
for(contatore=0;contatore<BUFFER;contatore++)
*(buffer+contatore)=0;
stringa=(char*)malloc(sizeof(char));
printf("OPERAZIONI SULLE STRINGHE TRAMITE L\'USO DI PUNTATORI");
printf("\nInserire una frase: ");
do {
verifica=0;
conta_input=0;
do {
carattere=getche();
*(buffer+conta_input)=carattere;
if(carattere==32)
verifica=1;
else if(carattere=='0')
verifica=2;
conta_input++;
}while(verifica==0 && conta_input<BUFFER);
dimensione=dimensione+conta_input;
if(esecuzione!=0)
posteggio=stringa;
stringa=(char*)malloc(dimensione*sizeof(char));
for(contatore=0;contatore<dimensione;contatore++)
*(stringa+contatore)=0;
if(esecuzione!=0)
strcat(stringa, posteggio);
strcat(stringa, buffer);
free(posteggio);
esecuzione++;
}while(verifica!=2);
printf("\n\nFrase inserita: %s\n\n", stringa);
system("pause");
free(stringa);
free(buffer);
return 0;
}
il programma sembra funzionare correttamente, ma se la frase che si inserisce diventa un po' lunga va in crash, e non ho capito il motivo per cui succede.
qualcuno è in grado di aiutarmi a risolvere questo problema?
vi allego il codice:
#include <stdio.h>
#include <stdlib.h>
#define BUFFER 26
int main() {
int conta_input=0;
int contatore=0;
char carattere;
int dimensione=1;
int verifica=0;
int esecuzione=0;
char *stringa, *buffer, *posteggio;
buffer=(char*)malloc(BUFFER*sizeof(char));
for(contatore=0;contatore<BUFFER;contatore++)
*(buffer+contatore)=0;
stringa=(char*)malloc(sizeof(char));
printf("OPERAZIONI SULLE STRINGHE TRAMITE L\'USO DI PUNTATORI");
printf("\nInserire una frase: ");
do {
verifica=0;
conta_input=0;
do {
carattere=getche();
*(buffer+conta_input)=carattere;
if(carattere==32)
verifica=1;
else if(carattere=='0')
verifica=2;
conta_input++;
}while(verifica==0 && conta_input<BUFFER);
dimensione=dimensione+conta_input;
if(esecuzione!=0)
posteggio=stringa;
stringa=(char*)malloc(dimensione*sizeof(char));
for(contatore=0;contatore<dimensione;contatore++)
*(stringa+contatore)=0;
if(esecuzione!=0)
strcat(stringa, posteggio);
strcat(stringa, buffer);
free(posteggio);
esecuzione++;
}while(verifica!=2);
printf("\n\nFrase inserita: %s\n\n", stringa);
system("pause");
free(stringa);
free(buffer);
return 0;
}