2017-02-05 3 views
0

Итак, я заполнил массивы, и мне нужно назначить их соответствующим полям структуры.заполнение значений структуры из массивов символов

char array1[MaxLine] = "bob"; 
char array2[MaxLine] = "rick"; 
char array3[MaxLine] = "dan"; 

Так что давайте просто притворимся, что это то, что они говорят. У меня есть структура, объявленная в файле заголовка, и эта функция находится во втором источнике, отдельно от основного. Как мне получить доступ к структуре из этой отдельной функции, чтобы заполнить значения из этих массивов.

Добавление этого в:

Я попытался объявить переменный Наполнитель ..

struct structname filler; 

, а затем с помощью, чтобы получить доступ к структуре и заполнить его таким образом ..

strcpy(filler->firstfield, input); 
strcpy(filler->secondfield, input); 

, но он продолжает бросать нарушение доступа.

+0

@chrk отредактировал его, извините. – AerisNeo

+0

вы не можете использовать '->' в структуре, проверьте сообщения компилятора. –

+0

Добро пожаловать в переполнение стека. Вскоре прочитайте страницы [О программе] и [Спросить], но более срочно прочитайте, как создать MCVE ([MCVE]). То, что вы включили в вопрос до сих пор, это не MCVE. Существует очень много важной информации, которая отсутствует, и любая из этих недостающих частей может содержать источник вашей проблемы. В общих чертах использование 'strcpy()' для копирования фиксированных данных в массивы соответствующего размера в структуре должно быть прекрасным. Если они являются указателями, а не массивами, в структуре, то вам нужно выделить память перед копированием. –

ответ

0

Вы должны передать его в качестве аргумента. Например:

#include "MyStruct.h" //declares the struct 
#include "MyFunctions.h" // where the function is 

int main() 
{ 
    struct MyStruct instance; 

    assignFields(&instance); 

    //instance is now assigned 
} 

//In MyFunctions.h you declare your function 
#include "MyStruct.h" //Needs to know about the struct 
void assignField(MyStruct*); 


//Then you implement it in the .c file 
void assignFields(MyStruct* localInstance) 
{ 
    //call strcpy here 
    //assuming the input strings are available her 
    //otherwise you have to pass them in as well 

} 

При запуске компилятора, он будет использовать файлы .h, чтобы выяснить, подпись и компилировать каждый файл по отдельности, то линкер поместит два .c файлов в одном исполняемой программе.

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