C 具有分段错误的客户端服务器代码
我正在做一个网络编程项目,写一个客户端-服务器的剪刀式代码。我完成了代码,在将这一行添加到代码之前,它在测试期间运行良好C 具有分段错误的客户端服务器代码,c,unix,C,Unix,我正在做一个网络编程项目,写一个客户端-服务器的剪刀式代码。我完成了代码,在将这一行添加到代码之前,它在测试期间运行良好 findWinner(gameType,pcChoice); 当我在代码中添加这一行时,代码开始从服务器端给我一个关于分段错误的错误。这就是我添加线条的地方 while(1) { int gameType; printf("Paper, Scissors, Rock game start.\n"); rc = read(client_sockfd,
findWinner(gameType,pcChoice);
当我在代码中添加这一行时,代码开始从服务器端给我一个关于分段错误的错误。这就是我添加线条的地方
while(1)
{
int gameType;
printf("Paper, Scissors, Rock game start.\n");
rc = read(client_sockfd, &gameType, 1);
srand(time(NULL));
pcChoice = (rand() % 3)+1;
findWinner(gameType,pcChoice);
gameType = pcChoice;
write(client_sockfd, &gameType, 1);
}
我是C语言的爱好者,不知道该怎么办
int pcChoice;
它是一个整数,用于将随机整数保持在1到3之间(石头布或剪刀)
findwinner():
可能存在问题的其他事项包括:
尝试显式null终止char*
const char *items[3]={"Paper\0","Scissors\0","Rock\0"};
你确定玩家永远不会是负数或大于3吗
printf("Client: %s\n",items[player-1]);
printf ("Computer: %s\n",items[pc-1]);
现在可能是学习如何使用调试器的好时机。请提供Findwiner函数代码以及pcChoice的类型和使用信息。您只需读取/写入一个字节的
gameType
。您应该使用sizeof gameType
来获得正确的大小。您可以捕获read()
的返回值,但不进行验证。在使用gameType
索引到项目数组之前,您不需要检查它是否在1到3的范围内。它很可能失控并导致崩溃。您也不应该每次在循环中设置随机种子。想想如果每秒循环几次会发生什么?然后您将多次设置同一种子,每次都会得到相同的随机数。只调用srand
一次。是的。除1、2或3外,客户端无法发送任何内容。。。但这是编程。我不能确定:在注释中输入printfs,并将while(1)更改为我所输入的内容,然后查看一个xplicit null终止会发生什么?为什么?@femchi有什么问题?sizeof。我把1byte改成了sizeof,可以用了,谢谢
const char *items[3]={"Paper\0","Scissors\0","Rock\0"};
printf("Client: %s\n",items[player-1]);
printf ("Computer: %s\n",items[pc-1]);