Tag: fputcsv

什么样的错误将“错误”设置为非零? 为什么fopen()设置“errno”而fputc()没有?

什么样的库函数影响errno并将其设置为非零值会遇到什么样的错误? 在我的下面的程序中,我打算使用if(errno!=0)作为检查我使用的库函数是否正常运行的条件,这就是我找到的(参见下面的代码): 首先,我使用if(errno!=0)来测试文件是否已使用fopen()成功fopen() 。 如果我尝试打开一个不存在的文件,则将errno设置为非零(在我的情况下为2),并通过在每个阶段打印出errno的值来validation它。 但是如果我打开一个现有文件,那么errno的值保持为零,因为fopen()正确地打开了文件。 在这个问题上, if(errno!=0)充当我已经注释掉的if(pFile==NULL)的完美替代品。 如果文件成功打开,并且errno仍为0 ,则控件将移至第一个else块。 这是我发现关于errno行为的混淆。 这里,由于我已经在r(读)模式下打开文件并尝试使用fputc()写入它,我期望得到的写错误将errno为非零,就像它由fopen()设置时一样无法成功打开文件。 但是即使在使用fputc()写入失败之后, errno的值仍然为零。 (这可以通过在错误写入后打印errno值来validation)。 为什么会这样? 为什么一个函数fopen()设置errno时遇到I / O错误,而其他函数fputc()面对的写错误不影响errno ? 如果是这样,我们怎样才能可靠地使用errno作为错误指标? 我是否使用errno来测试fopen()是否成功运行,而不是“if(pFile == NULL)”不明智? 我将非常感谢您对此的分析答案。 #include #include int main () { FILE * pFile; printf(“%d\n”,errno); pFile = fopen(“D:\\decrypt.txt”,”r”); printf(“%d\n”,errno); // Prints 0 if fopen() successful,else 2 //if(pFile==NULL) perror(“Error opening file”); if (errno!=0) perror (“Error opening […]