我通过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);
我需要获取包含消息的缓冲区部分的大小,或者只能写入我的文件到特定字符。无论哪种方式都可行。
答案 0 :(得分:3)
语句fwrite(buffer, 1, BUF_SIZE, fp)
将写入BUF_SIZE
个字节,无论缓冲区的实际内容如何,无论它是否包含'\0'
被视为"字符串终止"。
所以唯一的方法是告诉fwrite
要写的正确数量的元素;这可以通过指针算术很容易地计算出来:
fwrite(buffer, 1, pos-buffer, fp)
当然,您必须检查pos != NULL
是否等等;但我认为这是直截了当的。