为什么这会在读取 RAW 文件时打印出分段错误(核心已转储)?
Why does this print a segmentation fault (core dumped) while reading a RAW file?
你能告诉我为什么这段代码会出现段错误吗?我写这个是为了从 RAW 文件中读取数据并将其放入缓冲区数组中。
RAW 文件包含每个 512 字节的块,因此数组的大小为 512。
#include <stdio.h>
#include <stdlib.h>
long int findSize(FILE *file);
int buffer[512];
int main(int argc, char *argv[])
{
if (argc != 2)
{
printf("Usage: ./recover IMAGE\n");
}
FILE *file = fopen(argv[1], "r");
long int size = findSize(file);
int blocks = size/512;
int counts = 0;
for (int i = 0; i < blocks; i++)
{
while (fread(buffer, 1, 512, file) == 512)
{
printf("%i\n", buffer[counts]);
counts++;
}
}
}
long int findSize(FILE *file)
{
// checking if the file exist or not
if (file == NULL) {
printf("File Not Found!\n");
return -1;
}
fseek(file, 0L, SEEK_END);
// calculating the size of the file
long int res = ftell(file);
// closing the file
fclose(file);
return res;
}
在函数 findSize 中,您不应关闭文件,而应倒带:
// fclose(file);
rewind(file);
你能告诉我为什么这段代码会出现段错误吗?我写这个是为了从 RAW 文件中读取数据并将其放入缓冲区数组中。 RAW 文件包含每个 512 字节的块,因此数组的大小为 512。
#include <stdio.h>
#include <stdlib.h>
long int findSize(FILE *file);
int buffer[512];
int main(int argc, char *argv[])
{
if (argc != 2)
{
printf("Usage: ./recover IMAGE\n");
}
FILE *file = fopen(argv[1], "r");
long int size = findSize(file);
int blocks = size/512;
int counts = 0;
for (int i = 0; i < blocks; i++)
{
while (fread(buffer, 1, 512, file) == 512)
{
printf("%i\n", buffer[counts]);
counts++;
}
}
}
long int findSize(FILE *file)
{
// checking if the file exist or not
if (file == NULL) {
printf("File Not Found!\n");
return -1;
}
fseek(file, 0L, SEEK_END);
// calculating the size of the file
long int res = ftell(file);
// closing the file
fclose(file);
return res;
}
在函数 findSize 中,您不应关闭文件,而应倒带:
// fclose(file);
rewind(file);