Копировать значение из массива в переменные структуры

#arrays #c #struct #strtok

#массивы #c #структура #strtok

Вопрос:

Есть ли какой-либо способ скопировать значение из одного массива в переменную структуры? Вот пример:

У меня есть структура, и в структуре есть эти переменные;

 struct example
{ 
    int a;
    char b[];
};
 

и у меня есть массив, имя которого в моей основной функции — «токен». (Сначала в другой функции я использовал strtok для разделения моей строки на токены, а затем я использовал этот массив токенов в своей основной функции).

Теперь мой массив токенов выглядит так:

 token[0] = abc;
token[1] = 2;
token[2] = 10;
 

Теперь моя цель — сопоставить значения этих токенов с переменными моей структуры.

Нравится;

если token [0] == «что-то» (это должна быть строка), тогда выполните int a = 3

если token [0] ==»anotherthing» (это должна быть строка), то выполните int a=2

и

token[1] =b;(Я хочу ввести значение token[1] в массив b)

Как я могу это сделать? Есть ли какие-либо предложения?

Комментарии:

1. Я не могу понять это.

2. что вы имеете в виду symbol ? вы пытаетесь обновить int значение на основе strcmp ? не совсем понятно, что вы пытаетесь сделать. Минимальный код должен быть хорошим

3. обновлено. добавлена дополнительная информация. @IrAM

Ответ №1:

Есть ли какой-либо способ скопировать значение из одного массива в переменную структуры?

Массив C — это последовательность последовательных значений одного и того же типа. Это может быть серия структур, или целых чисел, или символов… любой допустимый тип. Если вы скопируете одно или несколько из этих значений, вы, конечно, можете делать с ними все, что вам нравится, включая присвоение их частям структуры. Если у вас есть:

 int intArray[5] = {1, 2, 3, 4, 5};
 

и структура:

 struct Example
{
    int start1; 
    int end1;
    int start2; 
    int end2;
    char symbol[];
};

struct Example ex;
 

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

 ex.start1 = intArray[0];
ex.end1 = intArray[4];
ex.start2 = intArray[1];
ex.end2 = intArray[3];
 

Части вашего примера сбивают с толку, потому что неясно, совпадают ли значения в вашем массиве:

 token[0] = abc;
token[1] = 2;
token[2] = 10;
 

Что abc здесь? Если это int похоже на другие значения, это нормально, но что это такое и как оно связано с другими значениями, неясно. Некоторые другие языки допускают разные типы значений в одном и том же массиве, но это не относится к C.

Комментарии:

1. кстати, abc — это строковое значение. Потому что первый токен является строкой. но остальные — «да».

2. @Fenikssy Это запутанная часть; C не позволяет вам смешивать строки и целые числа в одном массиве, поэтому вам нужно подумать о том, что вы пытаетесь сделать. Как token объявляется? Я понимаю, что это массив, но массив какого типа?