将字符串指针传递给fopen时出错

时间:2014-01-26 08:13:51

标签: c

编辑:我处于严格的C语言环境中。任何C ++代码都不起作用。我在一个我无法调试的环境中。我只能编译并删除所有错误的程序。对不起,如果我看起来很严格,那就是我在这样的环境中工作。任何帮助表示赞赏!

我有一个名为namefi.txt的文件,其中包含所有文件名。每一行只有一个文件名,所以我使用strtok删除所有空格,只取我传递给FOPEN的文件名。但似乎f-open并未接受它。它正在创建output.txt文件,甚至将其重命名为所需的名称(虽然直到name_ne.txt - 不确定为什么'w'缺失,'name'只有四个字符长,但仍然很好)但是当我打开文件,我看到的只是“文件打开错误Naren.txt”。如果我注释掉程序的namefi部分和重命名部分,它会从输入文件写入输出文件。它只是从namefi.txt获取文件名并打开它的部分没有发生。任何帮助,将不胜感激。这是我的代码。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void main()
{
    FILE *inpfi, *outfi, *namefi,newna;
    char buf[132], name[132], *trim;
    namefi = fopen("Namefi.txt", "r");
    while(frets(name, 132, namefi)!=NULL)
    {
        trim = strtok(name," ");
        inpfi = fopen(trim, "r");
        outfi = fopen("OUTPUT.txt", "w");
        if(!inpfi)
           fprintf(outfi, "File open error: %s", trim);
        while(fgets(but,132,inpfi)!=NULL)
            fprint(outfi, "%s", buf);
        newna = strtok(trim, ".");
        newna = strcat(newna,"_new.txt");
        rename("OUTPUT.TXT", newna);
        fclose(inpfi);
        fclose(outfi);
    }
}

1 个答案:

答案 0 :(得分:1)

  1. FILE *inpfi, *outfi, *namefi,newna;
    

    newna缺少*

  2. while(frets(name, 132, namefi)!=NULL)
    

    frets应为fgets

  3. trim = strtok(name," ");
    inpfi = fopen(trim, "r");
    

    你在第一次出现空格时开始你的文件名,我怀疑这是有意的。

  4. outfi = fopen("OUTPUT.txt", "w");
    

    在每次循环迭代中覆盖OUTPUT.txt。您可能希望使用"a"而不是"w"或在循环输入之前打开文件。

  5. while(fgets(but,132,inpfi)!=NULL)
    

    but应为buf

  6. fprint(outfi, "%s", buf);
    

    fprint应为fprintf

  7. newna = strtok(trim, ".");
    

    为什么现在将newna用作char*时将其声明为FILE(或FILE*,我认为应该是这样)

  8. rename("OUTPUT.TXT", newna);
    fclose(inpfi);
    fclose(outfi);
    

    在关闭文件之前重命名该文件。我不确切知道这种情况下究竟是什么行为,但我怀疑这是一个好主意。

  9. 我提到的大多数错误都可以通过校对,编辑器检查或编译器警告/错误轻松避免。您发布的代码肯定无法编译。