私は現在、Ubuntuを介してCで単純なクライアントサーバーアプリケーションをプログラミングしています。これまでのところ、私のログイン機能はうまく機能しているように見えます (クライアントにテキストを入力し、サーバーのファイルからテキストを取得して確認します) が、この特定の表示オプションが問題を引き起こしています。
サーバー側コードの一部のスニペット (別のサイトから以下の file copy to buffer 関数を取得しました):
char bflag[1]; //mainmenu option recveived from client
 char buffer[BUFSIZE+1]; //BUFSIZE is 1024
 long lSize;
 size_t result;
 FILE * userf;
 userf = fopen("Books.txt", "r+b");
 recv(new_sockfd, bflag, BUFSIZE, 0); //receive flag from clientside
 if ( (strncmp (bflag, "a", 1)) == 0) //display flag received
 {
  fseek (userf , 0 , SEEK_END);
  lSize = ftell (userf);
  rewind (userf);
  // copy the file into the buffer:
  result = fread (buffer,1,lSize,userf);
  send(new_sockfd, buffer, BUFSIZE, 0);
 }
fclose(userf);
クライアント側では、さまざまなオプションにスイッチを使用します。
char bbuf[BUFSIZE+1]; //BUFSIZE is 1024
switch (mmenuc)
{
 case 1:
{
 strcpy (mmenuf, "a"); 
 send (sockfd, mmenuf, BUFSIZE,0);//send flag 'a' to server
 system("clear");
 printf("Listing of books available:\n");
 printf("O = Available    X = Unavailable\n");
 printf("\n");
 recv (sockfd, bbuf, BUFSIZE,0);
 printf ("%s", bbuf);
 printf("\n");
 getchar(); //eats the "\n" 
 getchar(); //to pause
 break;
}
私が今直面している問題は、ファイル内のすべてのテキストが取得され、クライアント側の端末に正常に表示されることですが、サーバー側の端末ではセグメンテーション違反が発生します。どこかでバッファオーバーフローが発生していると思いますが、何が原因なのかわかりません。また、Books.txt ファイルには、後で編集するためのスペースが埋め込まれます。