我需要能够确保我的数组正确地从文件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);
}
答案 0 :(得分:0)
使用输入函数的返回值。 fread()
报告读取了多少元素 - 代码可能没有读取512.交换FILESIZE, 1
以检测读取的字符数/字节数。
// fread(&buffer, FILESIZE, 1, readfrom);
size_t count = fread(&buffer, 1, FILESIZE, readfrom);
只打印出读取的元素数量。推荐十六进制(可能是十进制)输出而不是字符。
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]);
}
如果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
在此处详细了解#define
:http://www.cplusplus.com/reference/cstdio/fread/