读取字符0x1A

时间:2015-07-09 10:59:54

标签: c file-io

我正在尝试读取一个包含大约1000个字符的文件。遇到0x1A字符时,文件读取将终止。我想要那个:

  1. 0x1A不应终止阅读。

  2. 0x1A应该像普通字符一样存储。

  3. 我可以使用另一种方法来读取文件吗?

    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);
    }
    

2 个答案:

答案 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时返回。