我正在通过 C 中的套接字接收一条写入缓冲区的消息。该消息在末尾添加了一个终止符 (@@
),因此我知道何时停止写入缓冲区,但是,缓冲区比消息大得多。有没有办法只写到终止符而不包括终止符,从而丢弃缓冲区的其余部分?
也许有位置指针?
char *pos;
FILE* fp = fopen("tempfile", "w+");
pos = strstr(buffer, "@@");
pos = '\0'; // Maybe I could stop the writing with NULL?
fwrite(buffer, 1, BUF_SIZE /*too big*/, fp);
fclose(fp);
我需要获取包含消息的缓冲区部分的大小,或者可能只向我的文件写入特定字符。无论哪种方式都行得通。
最佳答案
语句 fwrite(buffer, 1, BUF_SIZE, fp)
将写入 BUF_SIZE
字节,无论缓冲区的实际内容如何,也不管它是否包含 '\0'
被视为“字符串终止”。
所以唯一的方法就是告诉 fwrite
要写入的元素的正确数量;这可以通过指针算法轻松计算:
fwrite(buffer, 1, pos-buffer, fp)
当然,您必须检查是否 pos != NULL
等等;但我认为这是直截了当的。
关于c - 写入文件时排除终止符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45745757/