我试图从字符缓冲区的开头读取4个字节,但遇到了问题。memcpy
正在返回垃圾邮件。
buffer
包含文件的内容。使用断点,我看到文件以ASCII中的41 53 45 46
或ASEF
开头。这是Adobe Swatch文件的文件签名。
但是,当我将这4个字节从字符缓冲区复制到4个字节的数组signature
时,我会得到随机数据。
知道我在这里做错了什么吗?
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
int main(int argc, char **argv)
{
errno_t err = NULL;
FILE *fptr = NULL;
long fileSize = 0;
unsigned char* buffer;
int i, bytesRead;
char signature[4] = { 0 };
err = fopen_s(&fptr, argv[1], "rb");
if (err || fptr == NULL) {
fprintf(stderr, "Could not open file: %sn", argv[1]);
return 1;
}
// Get filesize
fseek(fptr, 0, SEEK_END);
fileSize = ftell(fptr);
rewind(fptr);
// Allocate memory to store file contents
buffer = malloc(fileSize);
if (buffer == NULL) {
fprintf(stderr, "Could not allocate %i bytes of memoryn", fileSize);
return 1;
}
// Read file contents into buffer
bytesRead = fread(buffer, 1, fileSize, fptr);
if (bytesRead == 0) {
fprintf(stderr, "Failed to read bytes from file: %sn", argv[1]);
return 1;
}
// Read and check signature
memcpy(signature, &buffer, 4);
fclose(fptr);
return 0;
}
此行错误:
memcpy(signature, &buffer, 4);
您希望复制缓冲区中的数据,而不是缓冲区指针本身的值。这意味着你想要:
memcpy(signature, buffer, 4);