Для char * varable, как просмотреть его значение в режиме отладки - PullRequest
0 голосов
/ 23 января 2019

Я написал ниже код для чтения двоичных файлов VC2017. В режиме отладки мне нравится видеть значения в «буфере». но я не мог видеть читаемые значения. мои вопросы:

  1. как посмотреть читаемый результат?
  2. Я сделал "sizeof (buffer)", он вернул 4, что оказалось меньше, чем я ожидал. Я ожидал, что буфер будет того же размера и размера файла. почему?

Большое спасибо за то, что просветили меня.

char* read_back(const char* filename) 
{
    FILE* pFile;
    long lSize;
    char* buffer;

    pFile = fopen(filename, "rb");

    if (pFile == NULL)
    {
        fputs("File error", stderr);
        exit(1);
    }

    fseek(pFile, 0, SEEK_END);
    lSize = ftell(pFile);
    rewind(pFile); // set file pos at the begining

    // copy the file into the buffer:
    buffer = (char*)malloc(sizeof(char)*lSize);
    size_t result = fread(buffer, 1, lSize, pFile);

    if (result != lSize)
    {
        fputs("Reading error", stderr);
        exit(3);
    }

    fclose(pFile);

    return buffer;
}

1 Ответ

0 голосов
/ 23 января 2019

Вот как сделать ваш код на C ++ (не тот код C, который у вас есть на самом деле)

#include <fstream>
#include <sstream>
#include <string>

std::string read_back(const char* filename)
{
    std::ifstream file(filename, std::ios_base::binary);
    std::ostringstream buffer;
    buffer << file.rdbuf();
    return buffer.str();
}

Возвращает std :: string, а не char *, но это хорошо, потому что вы неУ вас нет проблемы с запоминанием необходимости освобождать выделенную память.

Как было объяснено, вы неправильно понимаете, как работают указатели и размер.Избегайте указателей, они сложны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...