Посимвольный ввод строки с динамическим выделением памяти
Необходимо ввести строку посимвольно и выполнить несколько проверок. Проблема в том, что при вводе символов со строкой происходит какая-то дичь, более того, при вводе 6-го символа выводится ошибка "corrupted size vs. prev_size". Подскажите, пожалуйста, в чем проблема. Спасибо!
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int get_len(char *string){
int i = 0;
while(string[i]!='\0'){
i++;
}
return i;
}
char* del_spaces(char *str){
int i,k;
for (i = 0; str[i] != '\0'; i++)
if (str[i]==' ' || str[i]=='.' || str[i]=='!' || str[i]=='?'){
for (k = i; str[k] != '\0'; k++) str[k] = str[k+1];
i--;
}
return str;
}
int is_palin(char *string){
int k = get_len(string);
int i;
for(i=0; i<=k/2; i++){
if(!(string[i]==string[k-i-1])){
return 0;
}
}
return 1;
}
int main(void) {
int length,error,i,check, word_size, num_words, is_space;
word_size = num_words = 0;
length = 1;
char *string, sym;
char *value=NULL;
if(!(string = (char*)malloc(length * sizeof(char)))) printf("NullPointer");
while(1){
printf("\nВведите cимвол (для окончания ввода введите ./!/? ): ");
sym=getchar();
if (!((( sym>= 'a' || sym >= 'A') && (sym <= 'z'|| sym <= 'Z')) || sym==' ' || sym=='?' || sym=='!' || sym=='.' )) {printf("Неизвестный символ. Программа остановена"); return 0;}
while(getchar()!='\n');
length++;
if(!(string = (char*)realloc(string, sizeof(char)*(strlen(string)+1)))) printf("NullPointer");
is_space = 0;
if(sym == ' ') is_space=1;
if(sym == '.' || sym == '?' || sym == '!'){printf("\nВвод строки завершен"); break;}
if(is_space){
num_words++;
word_size=0;
} else {word_size++;}
if(num_words>30 || word_size>20){printf("\nПревышен размер предложения. Программа остановлена"); return 0;}
strcat(string, &sym);
printf("\n%s", string);
}
string = del_spaces(string);
if(is_palin(string)){
printf("\nПалиндром: True");
} else {
printf("\nПалиндром: False");
}
return 0;
}
Консоль:
