【发布时间】:2015-12-25 21:16:25
【问题描述】:
我正在编写一个连接四个服务器和客户端的游戏,我需要通过字符串将游戏数组传输到客户端。
我正在尝试使用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);
【问题讨论】:
-
“显示垃圾”很可能是没有终止字符串的问题,这会导致未定义的行为,如果你有UB(未定义的行为)那么它不会很长一步让你崩溃。
-
但是strcat我怎么用可以吗?
-
这取决于
gameArray[k][j]是什么。它是什么?垃圾和崩溃问题也可能是使用某些东西作为不是指针的指针,或者通过写入数组末尾的情况。 -
这是一个字符数组
-
那你为什么要投呢?你能出示实际的声明吗?