Тип приведение структуры в int - PullRequest
0 голосов
/ 27 февраля 2012

Привет всем, кому я хочу задать вопрос о приведении типов. Меня это сильно смущает. Я пишу код, в котором я использую уже созданную функцию с таким прототипом.

void function (uint8_t * output , const uint_8 * buffer , int bufferlen);

это называется так

const char * text = "some text";
uint8_t result[16];
function (result, (uint8_t *)text , strlen(text)); 

Но моя проблема в том, что я должен вызвать то же самое и передать ему структуру, поэтому я вызываю такую ​​функцию

const struct mystruct * ms;

function (result, (uint8_t *)ms , sizeof(*ms)); 

Но это дает мне ошибку сегментации. может ли кто-нибудь направить меня, что я должен передать вместо третьего аргумента.

Спасибо

Я использую C программирования Linux

Ответы [ 2 ]

0 голосов
/ 27 февраля 2012

Вы объявили неинициализированный указатель, который не указывает на допустимую память.Вот почему функция падает, когда пытается использовать этот указатель.Используйте это вместо:

struct mystruct *ms = (struct mystruct *) malloc(sizeof(struct mystruct)); 
function (result, (uint8_t *)ms, sizeof(struct mystruct));  
free(ms);

Или:

struct mystruct ms; 
function (result, (uint8_t *)&ms, sizeof(ms));  
0 голосов
/ 27 февраля 2012

Насколько велика структура?Ваш результат имеет определенную длину, 16, я предполагаю, что функция, которую вы вызываете, копируется в результат.Если он слишком маленький, у вас есть проблема.

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