自定义控制台输入代码,有时输出错误

时间:2018-12-19 00:41:43

标签: c memory dynamic segmentation-fault allocation

我正在测试我的代码,方法是编写一堆字符,然后连续几次使用退格键来“更正”它。正常情况下,代码可以工作,但是经过残酷的处理后,输出包括屏幕上的几个字母以及随后的一堆空字符。我想对该功能进行垃圾邮件验证。

该函数从键盘上获取一个字符,然后检查字符是否为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;
                }

            }

        }

    }

0 个答案:

没有答案