无法将字符串保存到log.txt

时间:2014-11-01 21:13:29

标签: c file sockets save fwrite

我正在制作一个聊天程序,使用recvsend通过套接字发送和接收信息。现在我正在尝试添加一个功能,以便自动将聊天记录保存到文件中。根据我现在所拥有的,它只打开/创建文件,但它不会写入任何内容。

在第46行,它打印"收到的消息"和63打印"自己的消息"在聊天中。有人能发现我的错误吗?

  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] != '#');

  }

1 个答案:

答案 0 :(得分:4)

创建文件是因为fopen创建了文件。但是,在您执行fclose(fd)之前,数据不会被保存。 C99保证如果程序以returnexit()结束,则所有打开的文件都将关闭。

所以,如果......你不应该看到任何东西。

  1. ...您正在使用SIGINT(Cntl + C)关闭您的程序。
  2. ...打开文件时程序仍在运行。