gpt4 book ai didi

不明白为什么我在 C 中打开文件时总是出错

转载 作者:行者123 更新时间:2023-11-30 16:39:33 25 4
gpt4 key购买 nike

我必须编写一个程序,它以二进制模式打开一个文件并计算它的大小。我只需编写一个函数即可完成此操作,并且它只需具有一个参数,即数据文件的名称。

我插入文件名并不断收到错误消息,但我不明白为什么。

这是函数

long getFileSize (char * fileName) {

long size_Of_File = 0;
FILE *data_file;
data_file = fopen(fileName, "rb");

if (data_file == NULL) {
printf("Error opening the file!\n");
return -1;
};

fseek(data_file, 0, SEEK_END);
size_Of_File = ftell(data_file);

fclose(data_file);
return size_Of_File;
}

以及 main() 函数(如果需要):

int main () {
char * fileName;
fileName = (char *) malloc (50 * sizeof(char)); //maximum length of the filename is 50 symbols
long file_size;


if (fileName != NULL) {
printf ("Please write the name of the data file (with \'.txt\' prefix): ");
fgets(fileName, 50, stdin);
file_size = getFileSize(fileName);
printf ("The size of the file is %li bytes.\n", file_size);
} else {
printf ("Could not allocate memory!\n");
};

free(fileName);
return 0;
}

感谢您提前提供的帮助。

最佳答案

正如 Tom Karzes 提到的,您需要从字符数组中删除换行符字节。

执行此操作的一种简单方法是一次一个字节地遍历字符数组,检查当前字节是否是换行符并将其替换为字符串终止符字节“\0”。

//...

fgets(fileName, 50, stdin);

//Replace the first occurrence of \n with \0 to end the string.
for ( int i=0; i<50; i++ ) {
if ( fileName[i] == '\n' ) {
fileName[i] = '\0';
break;
}
}

//...

关于不明白为什么我在 C 中打开文件时总是出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46995924/

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