2

我正在尝试打开一个文件(希望成为一个小型存档),并且我想在其中复制另一个文件内容。代码如下:

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;
} 

请假设“档案”是一个工作路径。

我调用函数如下./a.out archiveName FilePath

我想要做的就是打开这个存档,然后,在一些fprintfs(正常工作,此处未显示)打开另一个文件并将其内容写入存档后。
问题出在函数 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 制作 ac 文件,它就可以正常工作。

4

1 回答 1

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);

确保文件的路径和文件的内容符合您的期望。

于 2013-05-06T23:33:52.703 回答