写入文件时排除终止符

时间:2017-08-17 22:20:13

标签: c

我通过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);

我需要获取包含消息的缓冲区部分的大小,或者只能写入我的文件到特定字符。无论哪种方式都可行。

1 个答案:

答案 0 :(得分:3)

语句fwrite(buffer, 1, BUF_SIZE, fp)将写入BUF_SIZE个字节,无论缓冲区的实际内容如何,​​无论它是否包含'\0'被视为"字符串终止"。 所以唯一的方法是告诉fwrite要写的正确数量的元素;这可以通过指针算术很容易地计算出来:

fwrite(buffer, 1, pos-buffer, fp)

当然,您必须检查pos != NULL是否等等;但我认为这是直截了当的。