2014-11-01 120 views
0

我正在製作一個聊天程序,它使用recvsend通過套接字發送和接收信息。現在我正在嘗試添加一個函數,以便它自動將chatlog保存到文件中。我現在所擁有的只是打開/創建文件,但不會寫入任何內容。無法將字符串保存到log.txt

在第46行,它打印「收到的消息」,並在聊天中打印「自己的消息」。任何人都能發現我的錯誤?

int ThereAndBackAgain(SOCKET *clientSocket){ 
    char keyPress ='\0',tmp[200]={0}; 
    int index=0, i = 0; 
    FILE *fp; 
    char buffer[256]; 
    char nickName[10] = "Sneep"; 
    memset(&buffer[0], 0, sizeof(buffer)); 
    fp = fopen("chatlog.txt", "a"); 
    do{ 
     while(!kbhit()){ 

      if (recv(*(clientSocket), buffer, 255,0) != -1){ 

       printf("%s: \n",nickName); 
       printf("%s\n", buffer); //Prints received messages 

       fputs(buffer, fp); 

       memset(&buffer[0], 0, sizeof(buffer)); 
       i = 0; 
      } 
     } 
     if(keyPress=tmp[index++]=getch()){ 
      if(keyPress == '\r'){ // if user presses enter 

       for(i = 0; i < strlen(buffer); i++){ 
        if (i == 0) 
         printf("\b "); 
        else 
         printf("\b\b "); 
       } 
       i = 0; 
       //print the message to a good spot on the screen 
       printf("\b%s\n",buffer); // Prints own messages 
       send(*(clientSocket),buffer,strlen(buffer),0); 
       memset(&buffer[0], 0, sizeof(buffer)); 
      } 
      buffer[i] = keyPress; 
      printf("%c", keyPress); 
      if(keyPress == '\b'){ // if user presses backspace 
       printf(" \b"); 
       buffer[i-1] = ' '; 
       i--; 
      } 
      else{ 
       i++; 
      } 
     } 

    }while(buffer[0] != '#'); 

    } 
+0

小調:避免每次在循環中調用'strlen()'。 'size_t len = strlen(buffer); for(i = 0; i chux 2014-11-01 22:26:18

回答

4

創建該文件是因爲fopen創建文件。但是,數據不會保存,直到您執行fclose(fd)。 C99保證,如果程序以returnexit()結尾,所有打開的文件都關閉。

所以,你應該看不到任何東西,如果..

  1. ...你是縮小與SIGINT(CNTL + C)程序。
  2. ...程序在打開文件時仍在運行。
+0

哇,我不知道!在關閉程序之前有什麼辦法可以保存它嗎? – Morkerjan 2014-11-01 21:56:36

+0

是的,您可以嘗試打開文件並關閉它,以獲得每個新的附加文件: 'fp = fopen(「chatlog.txt」,「a」); fputs(buffer,fp); fclose(fp);' – 2014-11-01 21:58:00

+0

你也可以在不使用'fflush(fp);'關閉文件的情況下強制執行它。 所以你可以這樣做: 'fputs(buffer,fp); fflush(FP)'。 欲瞭解更多信息,請查看[fflush](http://pubs.opengroup.org/onlinepubs/009695399/functions/fflush.html) – 2014-11-01 22:06:19