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]);