将文本添加/附加到文件中行的末尾

时间:2015-06-26 23:21:49

标签: c

所以我试图将文字添加到一行的末尾。现在它在开头添加它很好,但我无法弄清楚如何将它添加到最后。

因此,此处的代码从一个文件中获取内容,并将其添加到临时文件中,然后将其写回具有添加文本的原始文件。然而现在它在行的开头添加文本,我需要在每行的末尾。

另外我想知道有没有办法将文本附加到每行的末尾,而不将所有内容复制到临时文件,只显示输出到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;

}

1 个答案:

答案 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()