c - 写入文件时排除终止符

标签 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);

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

最佳答案

语句 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/

相关文章:

python - 为什么调用动态库函数这么慢?

C 双向管不工作

c - printf 的类型转换,但其他情况则不然

c - printf 在调度进程函数中打印后给出段错误

c++ - Linux下如何将显示输出传到串口?

c - 当正交设置为 -1.0 到 1.0 时获取鼠标位置

c - 在 C 中添加一个数组中的前 2 个元素和另一个数组中的前 2 个元素

C: 哈希表上不兼容的指针类型

asp.net - 你调用的对象是空的。在 Guid.Parse 上

iphone - 在没有 iphone 的情况下创建 Iphone 应用程序? (用iphone模拟器?)