2013-12-18 3 views
0

У меня 2 struct S:Как выполнить MemSet переменной указатель на структуру, которая является указателем вар другой структуры в C

struct A 
{  
    B *b; 
}a; 

struct B 
{ 
    int* Info; 
} b; 

Как выполнить memset из информации в C?

memset((a->b->Info,0,sizeof(int)); 

информация должна быть memset с 0. Это должно быть сделано в течение 34 значений. Может ли это быть сделано для цикла?

Заранее благодарен!

+1

Что случилось, когда вы попробовали это? –

+1

Сбивая с толку, когда вы называете переменные A и B, а затем говорите: «Как мне выполнить« memset »информации в C?» –

+0

Зачем вызывать 'memset' на неинициализированном указателе, если вы не инициализировали его где-то еще (в этом случае лучше всего прямо упоминайте об этом в своем вопросе). Если вы 'malloc' int где-то, почему бы не использовать' calloc', он автоматически инициализирует память до 0 –

ответ

1

Когда вы определяете структуру, вы фактически создаете определенный пользователем тип данных. В приведенном выше коде A - тип данных, a - переменная этого типа. То же самое касается B и b.

a.b -> Info - это то, как вы должны получить доступ к информации через A, в вашем случае. Оператор . используется для доступа к элементам stuct с использованием обычной структурной переменной (без указателя). Если вы указали указатель x типа A, , то вы должны использовать x->b->Info.

Вы можете узнать о структурах C здесь:

http://www.tutorialspoint.com/cprogramming/c_structures.htm

+0

. Это помогает запомнить, что 'a-> b' эквивалентно' (* a) .b' – Thomas

+1

ошибка, которую я совершил, - это malloc был пропущен. Считается, что этот фрагмент кода разбился, когда был получен нулевой указатель. Спасибо за входы !!. – user3115584

1

Определение a и b в правильном порядке и инициализирует их:

struct B 
{ 
    int * Info; 
} b = { 
    NULL; 
    }; 

struct A 
{  
    B * b; 
} a = { 
    &b 
    }; 

Теперь a.b->info является NULL.

Смежные вопросы