gpt4 book ai didi

c - 文件大小总是在变化,使用 C 和 fopen_s 函数

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:49 26 4
gpt4 key购买 nike

我写了这个基本函数:

int save_files(PCHAR fileName)
{
errno_t err;
FILE* pFile = NULL;

do
{
if (!fileName)
{
printf("Input is NULL \n");
break;
}


err = fopen_s( &pFile, fileName, "r");
if(0 != err)
{
printf("The file %s was not opened for reading\n", fileName);
}
else
{
printf("The file %s was opened for reading \n", fileName);
}

/*getting the fileSize */
fileSize = dbg_getFileSize(pFile);
printf("############# FILE SIZE IS : %d #############\n" );
}

这是获取文件大小的函数:

UINT32 dbg_getFileSize(FILE *file)
{
UINT32 size = 0 ;

if (file == NULL)
{

return -1;
}

fseek(file , 0L , SEEK_END);
size = ftell(file);
fseek(file, 0L, SEEK_SET);/*set it to the head!!! */

return size;

}

我一直打开相同的路径,每次都得到不同的大小我尝试用 "r"和 "rb"打开它,但仍然得到相同的不同数字..

最佳答案

你得到不同的文件大小,因为下面一行:

printf("############# FILE SIZE IS :  %d #############\n" );

实际上并没有指定您要打印的变量。因此,当你调用它时,它可能会得到堆栈上的任何垃圾(我说可能,但任何都可能发生,因为你已经调用了可怕的“未定义行为”(a) ).

您可能想试试这个:

printf("############# FILE SIZE IS :  %d #############\n", fileSize );

(a) 来自 C99 7.19.6.1 The fprintf function , 在 C11 7.20.6.1 中未变,等效部分:

The fprintf function writes output to the stream pointed to by stream, under control of the string pointed to by format that specifies how subsequent arguments are converted for output. If there are insufficient arguments for the format, the behavior is undefined. If the format is exhausted while arguments remain, the excess arguments are evaluated (as always) but are otherwise ignored. The fprintf function returns when the end of the format string is encountered.

关于c - 文件大小总是在变化,使用 C 和 fopen_s 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13065226/

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