2012-02-27 2 views
0

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

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

+1

Я думаю, что мы должны знать больше о 'function'. Что он делает и почему вам нужно передать ему указатель на структуру вместо строки? – ibid

ответ

0

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

+0

Структура довольно большая, она содержит структуру и объединение в ней – mainajaved

+0

, тогда, если она больше 16, вы обязательно получите ошибки памяти. Ваш массив результатов должен быть достаточно большим, чтобы хранить копию структуры. – djna

0

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

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

no no на самом деле это инициализировано, я просто не написал его здесь – mainajaved

+0

@mainajaved: как вы ожидаете, что люди помогут вам правильно, если вы не покажете все, что вы на самом деле делаете? Заставляя людей догадываться, просто тратит время. –