Как Memcopy и скопировать обратно в массив символов? - PullRequest
0 голосов
/ 02 апреля 2020

Я хотел бы скопировать переменную в 1 байт в относительно большой массив символов и скопировать его обратно? Как я могу это сделать?

/* memcpy example */
#include <stdio.h>
#include <string.h>

struct Data {
  unsigned char name[40];
  int age;
};

typedef unsigned char       uint8_t;
typedef unsigned short int  uint16_t;

int main ()
{

    uint8_t myval = 8;
    uint8_t myval_2 = 8;
    Data mypass;

    memcpy(&mypass.name, &myval, sizeof(uint8_t));
    memcpy(&mypass.name+1, &myval_2, sizeof(uint8_t));

    uint8_t* myvalnew = nullptr;
    uint8_t* myvalnew_2 = nullptr;

    memcpy(myvalnew, (uint8_t*)&mypass.name, sizeof(uint8_t));
    memcpy(myvalnew_2, (uint8_t*)&mypass.name+1, sizeof(uint8_t));

    return 0;

}

Однако я получаю ошибки.

1 Ответ

2 голосов
/ 02 апреля 2020

&mypass.name создает указатель на ваш массив имен, вы хотите указатель на первый элемент вашего массива, вы можете использовать просто mypass.name или &mypass.name[0]. memcpy здесь не требуется, так как вы можете просто назначить элементы:

mypass.name[0] = myval;
mypass.name[1] = myval_2;

Ваш второй набор memcpy s потерпит неудачу, так как ваши myvalnew указатели равны нулю, я не уверен, что вы ' пытаемся достичь здесь. Если вы пытаетесь вернуть значения, вы можете снова использовать обычный доступ к массиву:

uint8_t myvalnew = mypass.name[0];
uint8_t myvalnew_2 = mypass.name[1];
...