使用外部文件中的信息,如何使用fread正确填充我的阵列?

时间:2016-07-07 21:27:21

标签: c arrays pointers

我需要能够确保我的数组正确地从文件card.raw通过fread接收值。

我对使用带指针的数组没有信心,所以如果有人能帮助我理解这里的理论,那将非常感激它。提前谢谢。

代码应该从字面上看一个大小为512字节的块并将其粘贴到数组中。然后我只是使用调试器和printf来检查数组输出。

/**
 * recover.c
 *
 * Computer Science 50
 * Problem Set 4
 *
 * Recovers JPEGs from a forensic image.
 */

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(int argc, char* argv[])
{

    //Size of EACH FAT JPEG in bytes    
    #define FILESIZE 512   

    unsigned char* buffer[FILESIZE];

    ///Step 1: Open jpeg
    FILE* readfrom = fopen("card.raw", "rb");
    if (readfrom == NULL)
    {
        printf("Could not open");
    }

    ///Step 2: Find Beginning of JPEG.  The first digits will be 255216255 Then 224 or 225
    fread(&buffer, FILESIZE, 1, readfrom);
    for(int x = 0; x < FILESIZE; x++)
    {
        printf("%d = %c\n", x,  buffer[x]);
    }

    fclose(readfrom);
}

2 个答案:

答案 0 :(得分:0)

  1. 使用输入函数的返回值。 fread()报告读取了多少元素 - 代码可能没有读取512.交换FILESIZE, 1以检测读取的字符数/字节数。

    // fread(&buffer, FILESIZE, 1, readfrom);
    size_t count = fread(&buffer, 1, FILESIZE, readfrom);
    
  2. 只打印出读取的元素数量。推荐十六进制(可能是十进制)输出而不是字符。

    for(size_t x = 0; x < count; x++) {
      // printf("%d = %c\n", x,  buffer[x]);
      printf("%3zu = %02X % 3u\n", x, buffer[x], buffer[x]);
    }
    
  3. 如果fopen()失败,最好不要继续使用for()fclose()

    if (readfrom == NULL) {
      printf("Could not open");
      return -1;
    }
    

答案 1 :(得分:0)

第二个参数是要读取的每个元素的大小(以字节为单位)。
第三个参数是每个元素的数量,每个元素的大小为&lt;第二个参数&gt;字节。
所以,交换你的第二个和第一个参数
{ path: '', component: HomeComponent, terminal: true, children: [ { path: 'access_token', component: TestComponent }, ] } 替换为platform-browser.umd.js:2312 EXCEPTION: Error: Uncaught (in promise): Error: Cannot match any routes: ''。目前,当您需要unsigned char* buffer[FILESIZE];时,您有一个unsigned char buffer[FILESIZE];数组。由于缓冲区已经是指针,因此您不需要获取其地址。unsigned char *调用中,将unsigned char替换为fread

它必须是这样的:&buffer

还有一件事:在buffer之后添加fread(buffer, 1, FILESIZE, readfrom);特定错误代码,因为如果文件尚未打开,您无法从中读取,是吗?并在return的末尾添加printf("Could not open");
并从return 0;中取出main
在此处详细了解#definehttp://www.cplusplus.com/reference/cstdio/fread/