c-字符缓冲区输入超过256个字符



我正在DOS上使用FreeRTOS内核创建一个程序,该内核允许我在包含自己文本用户界面的屏幕上呈现多个窗口。问题是我遇到了一个溢出错误,它是由向缓冲区中输入超过256个字符引起的。有办法解决这个问题吗?

我的代码的一部分:

int default_background=0;
int default_foreground=15;
struct window {                        /* Window structure */
    int special_id;
    int cursor_x,cursor_y;
    int width,height;
    long *background,*foreground;
    char *buffer;
};
long window_index_count=0;
struct window current_windows[10];
long create_window(int width,int height) {
    int i;
    long t;
    struct window new_window;
    new_window.special_id=window_index_count;
    window_index_count=window_index_count+1;
    new_window.cursor_x=0;
    new_window.cursor_y=0;
    new_window.width=width;
    new_window.height=height;
    for (t=0; t<width*height; t++) {
        new_window.background[t]=default_background;
        new_window.foreground[t]=default_foreground;
        new_window.buffer[t]=' ';      /* This is where the error occurs */
    }
    for (i=0; i<10; i++) {
        if (current_windows[i].special_id<=0) {
            current_windows[i]=new_window;
            break;
        }
    }
    return new_window.special_id;
}

实际上并没有为缓冲区分配内存。由于本地非静态变量在默认情况下是未初始化的,因此它们的值是不确定的。因此,当您使用指针new_window.buffer时,您不知道它指向哪里,导致未定义的行为

结构中的其他指针也是如此。

解决方案是为要指向的指针实际分配内存。

相关内容

  • 没有找到相关文章

最新更新