Сопоставить массив символов с буфером символов - PullRequest
0 голосов
/ 24 марта 2019

У меня есть двоичный файл, выгруженный в массив char.Некоторая часть файла может быть связана с struct s1.В зависимости от значения в struct1, будет еще N байт, прежде чем можно будет назначить другой struct struct2.Я хочу прочитать эти N байтов в другой массив и передать их в другом месте, но я не понял, как это сделать.Ниже моя попытка.

#include <stdlib.h>
#include <stdio.h>

struct s1{
    int x;
    int y;
    int N;
};

int main(){
    FILE *fp;
    fp = fopen("myfile.xyz", "rb");
    fseek(fp, 0, SEEK_END);
    int sz = ftell(fp);
    fseek(fp, 0, SEEK_SET);

    // Populate buffer
    unsigned char buffer[sz];
    fread(buffer, sz, 1, fp);
    char *pos = (char*) buffer;  // current pos pointer to file buffer

    // map s1, starting at pos
    struct s1 *s1 = (struct s1*) pos;
    // extra code parsing of s1...
    pos += sizeof(struct s1);  // increment pointer to after struct

    int N = 10; // should be read from s1 (i.e. it is not(!) a static number)
    char *temp = (char*) malloc((N+1)*sizeof(char));
    // assign temp to be N bytes, starting at pos...
    // parse_temp(temp);
    pos += N;
    free(temp);
    return 0;
};

Я попытался создать цикл for следующим образом, чтобы заполнить temp:

for(int i=0; i<N; i++){
        *temp[i] = (char *) (pos+i); //both temp[i] and *temp[i]...
    };

, но ни одна из версий не компилируется.Похоже, что этот подход отрицает идею простого сопоставления массива таким же образом, как и для структуры, поскольку temp - это новый блок памяти, не использующий «указатель на необработанную память» - думаю, я надеюсь, чтовыполняется приведение структуры.

Я медленно изучаю c, так что это может быть тривиальный вопрос с правильными поисковыми терминами ...

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