我正在尝试读取一个包含大约1000个字符的文件。遇到0x1A
字符时,文件读取将终止。我想要那个:
0x1A
不应终止阅读。
0x1A
应该像普通字符一样存储。
我可以使用另一种方法来读取文件吗?
int main(void)
{
int x=0,ch = ' ', file_name[25], arr[1000];
FILE *fp;
printf("Enter the name of file you wish to see\n");
gets(file_name);
fp = fopen(file_name, "r"); // read mode
if (fp == NULL)
{
perror("Error while opening the file.\n");
exit(EXIT_FAILURE);
}
printf("The contents of %s file are :\n", file_name); getchar();
int y= 0;
while ((ch = fgetc(fp)) != EOF)
{
printf("%d) %x \n",y, ch);
arr[y++] = ch;
printf(" %x \n", arr[(y- 1)]);
}
printf("Press to see the data off array..."); getchar();
for (int x = 0; x < y; x++)
{
printf("%d ", (x + 1));
printf(". %x \n", arr[x]);
}
getchar();
fclose(fp);
return(0);
}
答案 0 :(得分:4)
您将文件打开为txt模式,
fp = fopen(file_name, "r"); // txt mode
请尝试使用二进制模式阅读0x1A
,例如
fp = fopen(file_name, "rb"); // binary mode
答案 1 :(得分:0)
而不是fgetc()
,您可以使用fgets
。
while ((ch = fgetc(fp)) != EOF)
{
printf("%d) %x \n",y, ch);
payload[y++] = ch;
printf(" %x \n", arr[(y- 1)]);
}
您只需使用fgets()
-
#define MAX 1024
//open file in "r" mode
char arr[MAX];
while(fgets(arr,MAX,fp))
{
printf("%s",arr);
}
您文件中的内容存储在数组arr
中。
使用fgets
时,您不必担心EOF
fgets
本身会在遇到EOF
时返回。