C fprintf不是';t写入文件

C fprintf不是';t写入文件,c,printf,C,Printf,我试图使用下面的C代码打印出我传入的数组。它应该输出十六进制格式的文本,每行一个,我打开文件没有问题。当我第一次编写它时,它的工作没有问题,我打开了输出文件,我的数组就在那里。我更改了fileOutName参数,现在我无法让它打印出任何内容,我尝试将其更改回其他一些内容,但似乎没有任何效果。另外,当我调试时,它似乎是一个坏指针,但正如我所说,它仍然创建文件,它只是不会在其中写入任何内容。任何帮助都将不胜感激。谢谢 printoutput(int output[], char * fileOutN

我试图使用下面的C代码打印出我传入的数组。它应该输出十六进制格式的文本,每行一个,我打开文件没有问题。当我第一次编写它时,它的工作没有问题,我打开了输出文件,我的数组就在那里。我更改了
fileOutName
参数,现在我无法让它打印出任何内容,我尝试将其更改回其他一些内容,但似乎没有任何效果。另外,当我调试时,它似乎是一个坏指针,但正如我所说,它仍然创建文件,它只是不会在其中写入任何内容。任何帮助都将不胜感激。谢谢

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++;
    }
}
它应该输出十六进制格式的文本,每行一个

这条线

fprintf( pOutfile, "0x%0.4X\n", 5 );
始终格式化相同的数字-
5
。也许应该是这样

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

总是自己打扫干净。您缺少了一个
fclose(pOutfile)

您指望数组边界以外的元素为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)
}

另外,我强烈建议您习惯使用pre-increment操作符,而不是post-increment操作符。在这种情况下,它可能不会有什么不同,但对于大型输入或复杂类型,它可以减少执行时间。因此,++i而不是i++。

总是刷新:-)
fflush(pOutfile)同时检查
fopen
的返回。这是API中几乎必须处理错误的情况之一。它们非常常见(例如,没有写入权限,缺少媒体,文件已经存在但已锁定,神奇的文件名不允许应用程序使用(例如windows中的/proc或PRN))。哇,谢谢!因为某种我从未想到的原因,但它现在起作用了!抱歉,这是我的一个错误,我正在使用5进行测试,但忘记将其更改回:(