gpt4 book ai didi

c - while 循环第二次运行时出现段错误

转载 作者:行者123 更新时间:2023-11-30 16:40:10 25 4
gpt4 key购买 nike

我已经检查了所有其他问题,但是当 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:%s\n", menuselect);
printf("\nSelection:%d\n", selected);
}
}
recievedSelect = 1;
printf("\nDone recieving1");
}
printf("\nDone recieving2");
recievedSelect = 0;

程序第一次运行时,一切都按计划进行,但是当程序再次循环到这个 while 循环时,它在触发“Done receive1”文本后给出段错误。

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

任何帮助将不胜感激。

最佳答案

  1. 它比线路更安全:

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

使用

numbytes=recv(new_fd, menuselect, sizeof(menuselect), 0)
  • for() 循环应该仅迭代接收到的数据,因此而不是:

    for(int i = 0; i < sizeof(menuselect); i++)

  • 使用

    for(int i = 0; i < numbytes; i++)
  • recv() 返回二进制数据(非 NUL 终止),因此改为:

    printf("\nFrom menu:%s\n", menuselect);

  • 使用

    printf("\nFrom menu:%c\n", menuselect[0]);

    关于c - while 循环第二次运行时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46781229/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com