Я тестировал свой код, написав несколько символов и "исправив" его, используя несколько раз подряд возврат на одну позицию.Обычно код работает, но после этой жестокой обработки вывод состоит из нескольких букв с экрана и множества нулевых символов после.Я хочу спамить эту функцию.
Функция получает символ с клавиатуры, а затем проверяет, является ли символ вводом, вводом пробела или строчными буквами, заглавной буквой, если это ввод, добавляет нулевой символ в концеи возвращает, если это буква, она расширяет массив символов на единицу и добавляет символ в конце.если это возврат, он создает другой массив на 1 меньше предыдущего и перемещает на 1 элемент меньше от исходного массива к новому.После этого он удаляет старый массив и назначает новый массив старому указателю.
Я даже исправил ошибку нулевого указателя, которая возникала случайно.
У кого-нибудь есть идеи, почему он выводит мусор?Есть ли способ очистить входной буфер перед загрузкой другого символа?
char* readString()
{
int current_char=0;
char *char_ptr;
do{
char_ptr = (char*)calloc(1,sizeof(char));
}while(char_ptr==NULL);
while(true)
{
char c = getch();
if(c==13)
{
*(char_ptr+current_char)=0;
printf("\n\n");
for(int i=0;i<current_char+1;i++)
{
printf("%i \n", *(char_ptr+i));
}
return char_ptr;
}
if((97<=c && c<=112) || (65<=c && c<=90))
{
printf("%c",c);
*(char_ptr+current_char)=c;
current_char++;
do
{
char_ptr = (char*)realloc(char_ptr, sizeof(char)*(current_char+1));
}while(char_ptr==NULL);
}
if(c==8)
{
if(current_char==0)
{
continue;
}
printf("%c",c);
printf(" ");
printf("%c",c);
current_char--;
if(current_char==0)
{
free(char_ptr);
do{
char_ptr = (char*)calloc(1,sizeof(char));
}while(char_ptr==NULL);
}
else
{
char * next_pointer;
do{
next_pointer = (char*)calloc((current_char+1),sizeof(char));
}while(next_pointer==NULL);
memccpy(next_pointer, char_ptr, (current_char), sizeof(char));
free(char_ptr);
char_ptr=next_pointer;
next_pointer=NULL;
}
}
}
}