我正在尝试打开一个文件(想要成为一个小型存档),我想在其中复制另一个文件内容。代码如下:
FILE * arch;
FILE * par;
void read_words (FILE *f)
{
char x[1024];
while (fscanf(f," %s",x)==1)
{
fprintf(arch," %s", x);
}
}
int main(int argc, char * argv[])
{
char * nome;
nome = argv[1];
archivio = scrivi(getcwd(NULL, 0), nome);
arch = fopen(archivio, "w+");
par = fopen(argv[2], "r+");
read_words(par);
return 0;
}
请假设" archivio"是一条工作路径。
我按如下方式调用该函数:./a.out archiveName FilePath
。
我想要做的就是打开这个存档,然后,在一些fprintf
(正常工作,此处未显示)之后打开另一个文件并将其内容写入存档。
问题出在函数read_words中。它可以单独使用(我从这里获取代码),但是如果我在这里插入代码,它就不起作用,因为它甚至不能进入while (fscanf(f," %s",x)==1)
。实际上存档文件总是空的。
你能帮我找出原因吗?
由于
PS:这是我试图插入的示例文本:
La funzione mkbkp si occupa della creazione di un archivio contenente i file e le cartelle passate come parametri.
奇怪的是,如果你制作一个只有read_words的c文件,它就能正常工作。
答案 0 :(得分:1)
鉴于您描述程序行为的方式,我只能假设您没有阅读您想要阅读的文件。尝试使用此功能:
void show_file (const char *filename, FILE *out) {
int c;
FILE *file;
fprintf(out, "%s(%s) BEGIN\n", __func__, filename);
file = fopen(filename, "r");
if (file) {
while ((c = fgetc(file)) != EOF) {
fputc(c, out);
}
fclose(file);
} else {
fprintf(out, "%s: failed to open file '%s' (%d)\n", __func__, filename, errno);
}
fprintf(out, "%s(%s) END\n", __func__, filename);
}
您可以从main
这样调用此功能:
show_file(argv[2], stderr);
确保文件的路径和文件内容符合您的期望。