gpt4 book ai didi

c - 在一行内插入文本

转载 作者:太空宇宙 更新时间:2023-11-04 06:44:46 24 4
gpt4 key购买 nike

我有一个文件指针,我将其与 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”时,fgetsbuff 将不会读取任何行> 将为 NULL,但 newbuff 将保持不变。换句话说,newbuff 将包含来自上次 fgets 调用的数据。您将处理最后一行两次。参见 CLC FAQ 12.2了解更多信息和解决方案。

最后,为什么所有类型转换? o_rec_bufnewbuff 不是 char * 类型吗?

关于c - 在一行内插入文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1965982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com