我已经检查了所有其他问题,但是当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"文本后给出分段错误。
我真的不知道它为什么要这样做。
任何帮助将不胜感激。
- 它比行更安全:
numbytes=recv(new_fd, menuselect, MAXDATASIZE, 0)
用
numbytes=recv(new_fd, menuselect, sizeof(menuselect), 0)
- for() 循环应该只迭代接收到的数据,所以而不是:
for(int i = 0; i
用
for(int i = 0; i < numbytes; i++)
- recv() 返回一个二进制数据(不是 NUL 终止的),因此代替:
printf("From menu:%s", menuselect);
用
printf("nFrom menu:%cn", menuselect[0]);