所以我试图将文字添加到一行的末尾。现在它在开头添加它很好,但我无法弄清楚如何将它添加到最后。
因此,此处的代码从一个文件中获取内容,并将其添加到临时文件中,然后将其写回具有添加文本的原始文件。然而现在它在行的开头添加文本,我需要在每行的末尾。
另外我想知道有没有办法将文本附加到每行的末尾,而不将所有内容复制到临时文件,只显示输出到stdout?
int add_text_end(FILE *fileContents)
{
FILE *tmp = tmpfile();
char *p;
FILE *fp;
char line[LINESIZE];
if ((fileContents = fopen("fileContents.txt", "r")) == 0)
{
perror("fopen");
return 1;
}
/* Puts contents of file into temp file */
fp = fopen("fileContents.txt", "r");
while((p = fgets(line, LINESIZE, fp)) != NULL)
{
fputs(line, tmp);
}
fclose(fp);
rewind(tmp);
/* Reopen file to write to it */
fopen("fileContents.txt", "w");
while ((p = fgets(line, LINESIZE, tmp)) != NULL)
{
line[strlen(line)-1] = '\0'; /* Clears away new line*/
sprintf(line, "%s %s", line, "test");
fputs(line, fp);
}
fclose(fp);
fclose(tmp);
return 0;
}
答案 0 :(得分:0)
有更好的方法可以做到这一点,不会以错误的方式使用sprintf导致未定义的行为(你不能让目标缓冲区与sprintf作为参数读取的缓冲区相同) - 更改while块阻止以下内容:
while ((p = fgets(line, LINESIZE, tmp)) != NULL)
{
line[strlen(line)-1] = '\0'; /* Clears away new line*/
fprintf(fp, "%s %s\n", line, "test");
}
如果文件有\r\n
个结尾,请改用:
while ((p = fgets(line, LINESIZE, tmp)) != NULL)
{
char *r;
if ((r = strchr(line, '\r')) != NULL)
*r = '\0'; /* Clears carriage return */
fprintf(fp, "%s %s\r\n", line, "test");
}
如果您收到关于#include <string.h>
未被声明的警告,请务必strchr()
。