从文件读取并将输出打印到文件

时间:2014-04-20 15:19:56

标签: c

我知道这是你从文件中读取的方式。我还想将输出打印到文件的同名加“.txt”。因此,如果我的文件被称为“文本”,我想将其打印到名为“text.txt”的文件中。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main(int argc, char* argv[1])
{
    FILE* Data2;
    Data2 = fopen(argv[1], "r");
    if (Data2 == NULL)
    {
       printf("ERROR");
       exit(100);
    }

    return 0;
}

会是这样的吗?在fopen中使用“a”或“w”更好吗?我想写几遍。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main(int argc, char* argv[1])
{
    FILE* Data2;
    FILE* Data3;
    Data2 = fopen(argv[1], "r");
    Data3 = fopen(argv[1].txt, "a");
    if (Data2 == NULL)
    {
        printf("ERROR");
        exit(100);
    }
    fprintf(Data3, "\n Print something \n");
    fprintf(Data3, "\n Print something \n");
    fprintf(Data3, "\n Print something \n");

    return 0;
}

1 个答案:

答案 0 :(得分:2)

argv[1]是一个字符串。 .txt语法并不意味着将".txt"附加到其中。

但是,您可以通过创建一个具有足够大小的新缓冲区(使用strlen计算)并粘贴其中的两个字符串来实现这一点

char *fname = calloc(strlen(argv[1]) + 5, sizeof(fname[0])); /* +5 to have space for .txt and terminator */
strcpy(fname, argv[1]);
strcat(fname, ".txt");
Data3 = fopen(fname, "a");

或者,如果可以,可以使用asprintf并且想要使用GNU扩展而不是POSIX标准:

char *fname = NULL;
asprintf(&fname, "%s.txt", argv[1]);
Data3 = fopen(fname, "a");

现在,关于文件的打开,关于您发出fopen调用的那一刻非常重要:如果您传入"a",那么文件打开前的内容将保留在那里。如果您传入"w",则说明内容将被删除。在这两种情况下,您都可以在文件中写入多个内容。