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

Posted

技术标签:

【中文标题】无法将字符串保存到 log.txt【英文标题】:Unable to save string to log.txt 【发布时间】:2014-11-01 21:13:29 【问题描述】:

我正在制作一个聊天程序,它使用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] != '#');

  

【问题讨论】:

次要注意:避免在循环中每次调用strlen()size_t len = strlen(buffer); for(i = 0; i &lt; len; i++) 【参考方案1】:

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

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

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

【讨论】:

哇,我不知道!在我关闭程序之前有什么办法让它保存吗? 是的,你可以尝试打开文件并为每个新的追加关闭它:fp = fopen("chatlog.txt", "a"); fputs(buffer, fp); fclose(fp); 您也可以在不使用fflush(fp); 关闭文件的情况下强制执行此操作。所以你可以这样做:fputs(buffer, fp); fflush(fp)。欲了解更多信息,请查看fflush

以上是关于无法将字符串保存到 log.txt的主要内容,如果未能解决你的问题,请参考以下文章

php.如何将超连接问号后面的字符串写入一个txt? get.php ? 要写入的文字

怎么把eclipse logcat保存到本地

RestKit 无法将 JSON 请求中格式为字符串的日期保存到我的本地数据库

将录制的视频保存到照片库 - 无法将“URL”类型的值转换为预期的参数类型“字符串”

Linux——innode

将 udid 字符串保存到文本文件