gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:20:46 25 4
gpt4 key购买 nike

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

8年前关闭。




Improve this question




编辑:我在一个严格的 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);
}
}

最佳答案

  • FILE *inpfi, *outfi, *namefi,newna;
    newna缺少 * .
  • while(frets(name, 132, namefi)!=NULL)
    frets应该是 fgets
  • trim = strtok(name," ");
    inpfi = fopen(trim, "r");

    您在第一次出现空格时开始文件名,我怀疑这是故意的。
  • outfi = fopen("OUTPUT.txt", "w");

    你覆盖 OUTPUT.txt在每个循环迭代中。您可能想使用 "a"而不是 "w"或在循环进入之前打开文件。
  • while(fgets(but,132,inpfi)!=NULL)
    but应该是 buf .
  • fprint(outfi, "%s", buf);
    fprint应该是 fprintf .
  • newna = strtok(trim, ".");

    你为什么使用 newna现在为 char*当您将其声明为 FILE (或 FILE* 我猜应该是)
  • rename("OUTPUT.TXT", newna);
    fclose(inpfi);
    fclose(outfi);

    在关闭文件之前重命名文件。我不完全知道这种情况下的行为到底是什么,但我怀疑这是一个好主意。

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

    关于c - 将字符串指针传递给 fopen 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21361208/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com