2014-11-01 87 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