无法将字符串保存到 log.txt
Posted
技术标签:
【中文标题】无法将字符串保存到 log.txt【英文标题】:Unable to save string to log.txt 【发布时间】:2014-11-01 21:13:29 【问题描述】:我正在制作一个聊天程序,它使用recv
和send
通过套接字发送和接收信息。现在我正在尝试添加一个函数,以便它自动将聊天日志保存到文件中。就我现在所拥有的而言,它只会打开/创建文件,但不会向其中写入任何内容。
在第 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 < len; i++)
【参考方案1】:
文件被创建是因为fopen
创建了文件。但是,在您执行fclose(fd)
之前不会保存数据。 C99 保证如果程序以return
或exit()
结束,所有打开的文件都将关闭。
所以,如果..,你不应该看到任何东西。
-
...您正在使用 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 ? 要写入的文字
RestKit 无法将 JSON 请求中格式为字符串的日期保存到我的本地数据库