Стандартный способ представления C-строк состоит в том, что в памяти они представляют собой последовательность ненулевых байтов, представляющих символы, за которыми следует нулевой (или NULL) байт. Вы должны заявить:
char a[] = {0x3f, 0x4d, 0};
Когда вы назначаете строковый указатель (как в unsigned char *pstr = str;
), оба указателя указывают на одну и ту же область памяти и, следовательно, на одни и те же символы. Нет необходимости копировать символы.
Когда вам нужно скопировать символы, вы должны использовать strlen()
, оператор sizeof()
возвращает количество байтов, которое его аргумент использует в памяти. sizeof(pointer)
- это количество байтов, которые использует указатель, а не длина строки. Вы находите длину строки (то есть количество байтов, которое она занимает в памяти) с помощью функции strlen()
. Также есть стандартные функции для копирования строк С. Вы должны полагаться на тех, кто поступает правильно:
strcpy(pstr, str);