我正在编写一个连接四个服务器和客户端的游戏,我需要通过字符串将游戏数组传输到客户端。
我正在尝试使用 strcat
在字符串变量 playerBoard
中收集数组,但似乎当它到达客户端时,它显示垃圾,而且,服务器向我显示 Segmentation fault
作为错误
服务器:
else
{
bzero(playersBoard, 100);
int k, j;
for( k = 0; k < HEIGTH; k++ )
{
for( j=0; j < WIDTH; j++ )
{
strcat(playersBoard, (char *)gameArray[k][j]);
strcat(playersBoard, " ");
}
}
strcat(playersBoard, "Now is your turn");
printf("Players board is : \n%s\n", playersBoard);
if(write(tdL.cl, playersBoard, 100) <= 0)
{
printf("[thread %d]\n", tdL.idThread);
perror("[thread] Error at write\n");
}
else
printf("[thread %d] Message was sent with success\n", tdL.idThread);
goto playerOneRetry;
}
客户:
if (write (sd, message, sizeof(message)) <= 0)
{
perror ("[client]Eroare la write() spre server.\n");
return errno;
}
char message2[100];
fflush(stdout);
if (read (sd, message2, 100 ) < 0)
{
perror ("[client]Eroare la read() de la server.\n");
return errno;
}
//writing message
printf ("[client]Message received is : %s\n", message2);
最佳答案
(char *)gameArray[k][j]
1e : (char *)gameArray[k][j] :为什么要强制转换? gameArray[k][j] 应该是 2 dim。类型数组 (char *)。如果您需要进行转换,您可能将其定义错误,这会导致段。错误。
2e:你确定你没有超过 playersBoard 吗?那会导致它。
3e : bzero(playersBoard, 100); : playersBoard 的大小可能是已知的。您应该始终尽量避免使用静态 100 并将其替换为 maybe :sizeof(playerBoard)。
4e :您可以防止 playersBoard 溢出。使用 strncat 并且不要写得太多。在防御性编程方面.. 你应该。
关于C 服务器和客户端 - 段错误并显示垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34466486/