我知道这是你从文件中读取的方式。我还想将输出打印到文件的同名加“.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;
}
答案 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"
,则说明内容将被删除。在这两种情况下,您都可以在文件中写入多个内容。