C语言 while 循环第二次运行时的分段错误



我已经检查了所有其他问题,但是当while循环第一次运行时,它们都有分段错误,但是我得到的错误来自while循环的第二次运行,这让我大吃一惊

printf("nrecieving1");
while(recievedSelect == 0){
    printf("nrecieving");
    if ((numbytes=recv(new_fd, menuselect, MAXDATASIZE, 0)) == -1){
        perror("recv");
        exit(1);
    }
    for(int i = 0; i < sizeof(menuselect); i++){
        if(isdigit(menuselect[i])){
            selected = menuselect[i] - '0';
            recievedSelect = 1;
            printf("nFrom menu:%sn", menuselect);
            printf("nSelection:%dn", selected);
        }
    }
    recievedSelect = 1;
    printf("nDone recieving1");
}
printf("nDone recieving2");
recievedSelect = 0;
程序

第一次运行时,一切都按计划进行,但是当程序再次循环到这个while循环时,它会在触发"完成接收1"文本后给出分段错误。

我真的不知道它为什么要这样做。

任何帮助将不胜感激。

  1. 它比行更安全:

    numbytes=recv(new_fd, menuselect, MAXDATASIZE, 0)

numbytes=recv(new_fd, menuselect, sizeof(menuselect), 0)
  1. for() 循环应该只迭代接收到的数据,所以而不是:

    for(int i = 0; i

for(int i = 0; i < numbytes; i++)
  1. recv() 返回一个二进制数据(不是 NUL 终止的),因此代替:

    printf("From menu:%s", menuselect);

printf("nFrom menu:%cn", menuselect[0]);

最新更新