Присвоение массива значению Struct в C - PullRequest
0 голосов
/ 13 декабря 2010

Для домашнего задания мы работаем над анализатором CSV.Я пытаюсь заставить вещи работать, но я столкнулся с проблемой.Кажется, я не могу присвоить значение значению «field» в структуре.В предоставленном ими коде они имеют:

typedef char f_string[MAX_CHARS+1] ;    /* string for each field */

    typedef struct {
        int nfields;                        /* 0 => end of file */
        f_string field[MAX_FIELDS];         /* array of strings for fields */
    } csv_line ;

С указанными выше константами, определенными в 20 и 15. Если посмотреть на то, что у них есть, структура содержит и int, и она содержит массив, который должен быть заполненf_string typedef, который они определили ранее.Хорошо крутоЯ попытался сделать это следующим образом:

f_string test = "Hello, Bob";
f_string testAgain = "this is dumb, k?";
f_string anArray[MAX_FIELDS] = {*test, *testAgain};

csv_line aLine;
aLine.nfields = 3;
aLine.field = *anArray;

Когда я делаю "anArray", если у меня нет разыменований для test и testAgain, я получаю предупреждения о создании целых для указателей без приведения.Поэтому я оставляю их внутри. Но строка:

aLine.field = *anArray;

Возвращает ошибку: «csv.c: 87: ошибка: несовместимые типы в присваивании» с указателем или без него ... так что яне уверен, как я должен назначить эту переменную?Помощь будет оценена!

1 Ответ

5 голосов
/ 13 декабря 2010

Вы не можете назначить массив, используя =.См. этот вопрос для более подробного объяснения.

Вам нужно будет скопировать каждую строку с помощью функции strcpy (или более безопасной strncpy):

for (int i = 0; i < aLine.nfields; ++i)
{
  strncpy(aLine.field[i], anArray[i], MAX_CHARS);
}

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

f_string test = "Hello, Bob";
f_string testAgain = "this is dumb, k?";
f_string anArray[MAX_FIELDS] = {*test, *testAgain};

Будет скопирован первый символ из test и testAgain.Вам нужно сделать что-то вроде:

f_string test = "Hello, Bob";
f_string testAgain = "this is dumb, k?";
f_string anArray[MAX_FIELDS];
strcpy(anArray[0], test);
strcpy(anArray[1], testAgain);

или просто:

f_string anArray[MAX_FIELDS] = {"Hello, Bob", "this is dumb, k"};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...