我有一个文件指针,我将其与 fgets() 一起使用,以在缓冲区中为我提供完整的行以及新行。 我想替换 1 个字符并在新行之前添加另一个字符。那可能吗? 例如:
buffer is "12345;\n"
output buffer is "12345xy\n"
这是代码:
buff = fgets((char *)newbuff, IO_BufferSize , IO_handle[i_inx]->fp);
nptr = IO_handle[i_inx]->fp;
if(feof(nptr))
{
memcpy((char *)o_rec_buf+(strlen((char *)newbuff)-1),"E",1);
}
else
{
memcpy((char *)o_rec_buf+(strlen((char *)newbuff)-1),"R",1);
}
如您所见,我正在替换此处的新行(示例行如上所示)。 我想插入文本并保留新行,而不是我在上面所做的。
最佳答案
您不能按照您想要的方式插入一个字符。如果您确定 o_rec_buf
有足够的空间,并且该行总是以 ";\n"
结尾,那么您可以这样做:
size_t n = strlen(newbuff);
if (n >= 2)
strcpy(o_rec_buf + n - 1, "E\n");
/* memcpy(o_rec_buf+n-1, "E\n", 3); works too */
请注意,像您这样使用 feof()
大多数时候都是错误的。 feof()
告诉您是否在文件上 到达文件结束条件。如果您在循环中运行上述代码,当 feof()
返回“true”时,fgets
和 buff
将不会读取任何行> 将为 NULL
,但 newbuff
将保持不变。换句话说,newbuff
将包含来自上次 fgets
调用的数据。您将处理最后一行两次。参见 CLC FAQ 12.2了解更多信息和解决方案。
最后,为什么所有类型转换? o_rec_buf
和 newbuff
不是 char *
类型吗?
关于c - 在一行内插入文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1965982/