【问题标题】:fprintf isn't writing to filefprintf 没有写入文件
【发布时间】:2012-09-17 00:55:18
【问题描述】:

我正在尝试使用以下 C 代码打印出我传入的数组。它应该在每一行以十六进制格式输出文本,并且打开文件没有问题。当我第一次编写它时,我没有遇到任何问题,我打开了输出文件,我的数组就在那里。我更改了fileOutName 参数,现在我无法让它打印出任何我尝试将它改回来的东西以及其他一些东西,但似乎没有任何效果。此外,当我调试时,pOutfile 似乎是一个错误的指针,但就像我说的那样,它仍然会创建文件,只是不会在其中写入任何内容。任何帮助,将不胜感激。谢谢

printoutput(int output[], char * fileOutName){
    int i = 0;
    FILE * pOutfile;
    pOutfile = fopen( fileOutName, "w" );
    while(output[i] != 0){
        fprintf( pOutfile, "0x%0.4X\n", output[i] );
        i++;
    }
}

【问题讨论】:

  • 总是刷新 :-) fflush(pOutfile);
  • 同时检查fopen的返回。这是几乎必须处理错误的 API 案例之一。它们非常常见(例如没有写入权限、缺少媒体、文件已经存在但被锁定、应用程序不允许使用的神奇文件名(例如 Windows 中的 /proc 或 PRN))。

标签: c printf


【解决方案1】:

总是自己清理干净。你错过了fclose(pOutfile)

【讨论】:

  • 哇,谢谢!出于某种我从未想过的原因,但它现在可以工作了!
【解决方案2】:

它应该以每行一个十六进制格式输出文本...

这一行

fprintf( pOutfile, "0x%0.4X\n", 5 );

始终格式化相同的数字 - 5。应该是

fprintf( pOutfile, "0x%0.4X\n", output[i] );

【讨论】:

  • 对不起,这是我的一个错误,我使用 5 进行测试并忘记将其改回 :(
【解决方案3】:

您指望数组边界之外的元素为 0,除非您明确设置它,否则情况可能并非如此。如果你是,那没关系。通常,传递数组及其大小;这样更安全、更易阅读、更便携。

printoutput(int output[], int size, char * fileOutName){
    int i=0;
    FILE * pOutfile;
    pOutfile = fopen( fileOutName, "w" );
    while(i!=size){
        fprintf( pOutfile, "0x%0.4X\n", output[i] );
        ++i;
        }
    fclose(pOutfile)
}

另外,我强烈建议您习惯使用前自增运算符而不是后自增运算符。在这种情况下,它可能不会产生影响,但对于大输入或复杂类型,它可以减少执行时间。因此,++i 而不是 i++。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2019-03-25
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    相关资源
    最近更新 更多