我正在测试我的代码,方法是编写一堆字符,然后连续几次使用退格键来“更正”它。正常情况下,代码可以工作,但是经过残酷的处理后,输出包括屏幕上的几个字母以及随后的一堆空字符。我想对该功能进行垃圾邮件验证。
该函数从键盘上获取一个字符,然后检查字符是否为Enter,Backspace或小写大写字母 如果是回车,则在末尾添加一个空字符并返回, 如果是字母,则将字符数组扩展一个,并在末尾添加字符。 如果它是一个退格键,它将创建另一个比前一个数组小的数组,并将少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;
}
}
}
}