在C中使用ncurses的wrefresh函数时出现分段错误

问题描述 投票:0回答:1

首先,我创建了两个带有ncurses的窗口:一个用于发送,另一个用于接收。基本上,一个用于编写命令,另一个用于打印命令。为了在接收窗口中写入输入,我做了一点功用,将已经在接收窗口中的字符串与用户编写的字符串连接起来(我认为问题出在这里)。

所以,当我运行代码时,程序失败并显示转储到wrefresh(winReception);行的Segmentation Fault代码。>

但是奇怪的是,如果输入的字符数少于或等于7个,则有效;如果输入的字符数小于或等于8,则中断。

我正在使用Code :: Blocks

此处的屏幕截图:https://imgur.com/a/zEwBs1k

这里是一些代码:

//Global variables
WINDOW * winReception;
WINDOW * winTransmission;
char * command;
char mesg[] = "Enter a command";
//variable to stock the input in reception window
char *textinwindow = "";

//main
int main(int argc, char* argv[])
{
    initscr();

    /* WINDOW RECEPTION */
    winReception = newwin(15, 0, 0, 0);
    wrefresh(winReception);


    /* WINDOW TRANSMISSION*/
    winTransmission= newwin(8, 0, 15, 0);
    wrefresh(winTransmission);
    mvwprintw(winTransmission, 1, 2, mesg);

    wgetstr(winTransmission, &command);
    verifInput(&command);

    free(textinwindow);

    exit(0);
}

//concat function (where I think the bug is)
char* concat(char *s1, char *s2)
{
    char *result = (char *) malloc(strlen(s1) + strlen(s2) + 1);
    strcpy(result, s1);
    strcat(result, "\n ");
    strcat(result, s2);

    return result;
}

//verifInput (where the program fails)
void verifInput (char* cmd)
{
    /* WINDOW RECEPTION */
    textinwindow = concat(textinwindow, cmd);
    mvwprintw(winReception, 1, 2, textinwindow);
    wrefresh(winReception);

    /* WINDOW TRANSMISSION*/
    touchwin(winTransmission);
    wclear(winTransmission);
    wrefresh(winTransmission); //Program fails here
    mvwprintw(winTransmission, 1, 2, mesg);

    wgetstr(winTransmission, &command);
    verifInput(&command);
}

首先,我创建了两个带有ncurses的窗口:一个用于发送,另一个用于接收。基本上,一个用于编写命令,另一个用于打印命令。将输入写在...

c codeblocks ncurses
1个回答
0
投票

如注释中所述,这里存在许多问题,但是主要的问题是wgetstr()的使用完全不正确,因为它接受了用户的输入并将其填充到缓冲区中,但是您尚未分配缓冲区。我们不知道command的值是什么,因此它会将数据存储到随机存储器中。

© www.soinside.com 2019 - 2024. All rights reserved.