Например, этот код использует статический буфер и работает:
Код: Выделить всё
HANDLE fileHandle = CreateFileW(L"C:\\Users\\Home\\Documents\\a.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (fileHandle == INVALID_HANDLE_VALUE) {
MessageBox(NULL, L"Invalid Handle", NULL, MB_OK);
}
else {
char b[500]; // buffer with size defined at compile time
DWORD size = GetFileSize(fileHandle, NULL);
if (ReadFile(fileHandle, &b, 409, NULL, NULL) != true) {
MessageBox(NULL, L"Read file error", NULL, MB_OK);
}
else {
b[500] = 0;
MessageBoxA(NULL, b, "It works!", MB_OK);
}
}
Код: Выделить всё
HANDLE fileHandle = CreateFileW(L"C:\\Users\\Home\\Documents\\a.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (fileHandle == INVALID_HANDLE_VALUE) {
MessageBox(NULL, L"Invalid Handle", NULL, MB_OK);
}
else {
DWORD size = GetFileSize(fileHandle, NULL);
LPVOID b = malloc(size+1);
if (ReadFile(fileHandle, &b, size, NULL, NULL) != true) {
MessageBox(NULL, L"Read file error", NULL, MB_OK);
}
else {
char* a = (char*)b;
a[size] = 0;
MessageBoxA(NULL, a, "It works!", MB_OK);
}
}
Код: Выделить всё
Exception thrown: read access violation. a was 0x111011101110111.Подробнее здесь: https://stackoverflow.com/questions/793 ... allocation