【问题标题】:Creating and writing in multiple txt files in C在 C 中创建和写入多个 txt 文件
【发布时间】:2016-10-14 15:19:20
【问题描述】:

我有一个代码,它在名为 (Nodes) 的目录中创建 j 个文件 (Node[j].ID),在这些 j 个文件中,代码写入 NodeResults 中包含的信息。目前,由于 strcat 函数不起作用,代码既不会创建也不会写入文件。请知道如何更正代码以获取包含在 NodeResults 中的信息的创建文件?提前致谢。请在下面找到代码:

{

    int period, j ;
    FILE*temporal;
    FILE* temp_time;
    char path[25];
    char* extention = ".txt";
    char s[30];
    char temporal2[25];
    long time_val = 0;
    _mkdir("Nodes");
    _mkdir("time"); 


    temp_time = fopen("Time/time.txt", "w");
    fprintf(temp_time, "%d,%d\n", ReportStep, Nperiods);
    fclose(temp_time);

    for ( j = 0; j < Nobjects[NODE]; j++ ) {
        /* File path writing */

        strcpy(temporal2,"Nodes/");
        strcat(temporal2, Node[j].ID);
        strcat(temporal2, extention);

        temporal= fopen(temporal2, "w"); 
    }                    
    for ( period = 1; period <= Nperiods; period++ ) {
        output_readNodeResults(period, j);
        fprintf(temporal, "%9.3f,%9.3f,%9.3f,%9.3f,%9.3f\n",
                    NodeResults[NODE_INFLOW],
                    NodeResults[NODE_OVERFLOW], 
                    NodeResults[NODE_DEPTH],
                    //NodeResults[NODE_HEAD],
                    NodeResults[NODE_VOLUME]);
    }
    fclose(temporal);

    return Nperiods;
}

【问题讨论】:

  • 使用调试器并检查 a) 创建文件名的结果 - 可以吗? b) fopen 的结果(无论如何,该检查都应该在代码中 - 始终检查 fopen 的结果!)
  • minimal reproducible example 可能会有所帮助。
  • 文件名25是不是有点小?您最终可能会覆盖其他变量。
  • 我很确定 strcat 可以工作
  • 试试这个问题,它可能会有所帮助。 How to write to separate files

标签: c


【解决方案1】:

您在第一个for 循环中打开了一堆文件,但不要向它们写入任何内容。在每次迭代中,您将一个新的FILE * 分配给变量temporal,覆盖之前的任何值。之后,在您的第二个for 循环中,您将一堆输出写入最后打开的文件——temporal 在此时引用的文件。

您似乎想将第二个 for 循环和 fclose() 的主体移动到第一个 for 循环中。

【讨论】:

  • 啊...我明白了.. 大括号在错误的行上。打开后的支架应该在关闭后。这再次强调了正确格式化的重要性!
  • 非常感谢大家抽出宝贵时间。我已经格式化了我的代码并更正了大括号。但是,目前我遇到“访问冲突读取位置 0x00000000”意味着我正在取消引用尚未初始化的指针,因此出现错误。另一方面,我打算使用 sprintf 来生成文件,但现在我得到了 fopen 表达式 temporal2 ,它用作缓冲区 =Null
【解决方案2】:

我已经正确格式化了你的代码,现在 John 的评论立即突出:大括号在错误的行上,导致错误的 for 循环和块!

如果您自己正确地格式化了代码,您自己就会立即看到它!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多