Вопросы с тегами [struct]

1

голосов
1

ответ
15

Просмотры

Определение 2D массива внутри структуры в спецификации RPC не работает

Я пытаюсь реализует с помощью RPC NFS. Теперь мой файл спецификации выглядит примерно так: (Это очень базовая версия этого :)) ввод STRUCT {команды полукокса [20]; символ Arg [10] [10]; ИНТ numargs; }; структура lsresult {символ обр [50] [256]; }; Программа NFSPROG {версия NFSVERSION {lsresult Ls (вход) = 1; INT кд (вход) = 2; INT MkDir (вход) = 3; INT mkfile (вход) = 4; } = 1; } = 0x21111111; Когда я пытаюсь собрать этот Spec.x используя rpcgen, я получаю сообщение об ошибке, как это: обугленного ARG [10] [10]; ^^^^^^^^^^^^^^ Spec.x, строка 4: ожидается ';' Что может быть причиной этого? Не могу ли я объявить 2D массив внутри структуры в спецификации RPC? (То же ошибка появилась, когда я попытался объявить переменные таким образом: Int а, б, в структурах!)
Ricky
1

голосов
1

ответ
114

Просмотры

Как декодировать JSON, который имеет несколько списков, которые неназванные в Swift [дублированный]

Этот вопрос уже есть ответ здесь: Декодирование JSON массив различных типов в Swift 3 ответов Я пытаюсь декодировать строку JSON, но, кажется, есть несколько списков, которые не имеют никаких имен / ключи, которые я могу позвонить с моими структурами. Из того, что я могу сказать (с небольшим количеством знаний у меня есть) есть два списка внутри этого JSON, и я хочу только второй список. Я знаю, как декодировать нормальный JSON, но выяснить, как назвать этот список без ключа / массив озадачивает. Я пытался сделать мое использование STRUCT 0 или 1, в зависимости от того, какого списка я хотел, как имя дела, но это не сработало. Я действительно просто запутался о том, как назвать то, что не по имени явно. Ниже мои данные JSON и код. Вот небольшая часть JSON: [{ "страница": 1, "страница": 1, "per_page": URL? {Вар компонента = URLComponents (URL: сам, resolvingAgainstBaseURL: истинная) компонента .queryItems = queries.compactMap {URLQueryItem (название: $ 0,0, стоимость: $ 0,1)?} Возвращаемые компоненты .url}}? Я просто хочу, чтобы в конечном итоге получить доступ к датам и поместить их в массив для Tableview и быть в состоянии получить доступ к остальной части данных в формате JSON для следующей точки зрения. Большое вам спасибо, Джек URL}} Я просто хочу, чтобы в конечном итоге получить доступ даты и поместить их в массив для Tableview и быть в состоянии получить доступ к остальной части данных в формате JSON для следующей точки зрения. Большое вам спасибо, Джек URL}} Я просто хочу, чтобы в конечном итоге получить доступ даты и поместить их в массив для Tableview и быть в состоянии получить доступ к остальной части данных в формате JSON для следующей точки зрения. Большое вам спасибо, Джек
Jack Welch
1

голосов
1

ответ
32

Просмотры

Как использовать член структуры для арифметических операторов (добавить, к югу, мула, отд переменного в качестве члена структуры)

Извините за нуб вопрос. Как я могу использовать Arith операторы к переменным в структуре? У меня есть эта структура STRUCT счет {INT нет; символ имени [100]; INT контактный; плывут идентификатор; }; что я хочу сделать, это добавить значение, чтобы плавать идентификатор #include #include #include #include основной () {структура счета {INT нет; символ имени [100]; INT контактный; плывут идентификатор; }; счет прн структура; плавать I; Е ( "введите переменный, значение \ N"); зсапЕ ( "% F", & я); Е ( «введите значение STRUCT \ п»); зсапЕ ( "% F", & rec.id); rec.id = rec.id + I; Е ( "сумма% 0.2f", rec.id); } Значение rec.id остается неизменным. Я знаю, что я что-то не хватает. надеюсь, это не будет слишком беспокоить
marc jose
1

голосов
0

ответ
79

Просмотры

Write struct to text file gives Korean letters

The program I'm writing is suppose to ask the user for name, haircolor, age and weight and these are then placed in a struct. The struct is then written to a file 'REGISTER.TXT' among other heroes. I'm using three separate files of main.cpp, hero.h and hero.cpp where the latter holds the current functions. ** Main Issue: The struct writes korean characters instead of 'A - Z'. This is interesting in this case because I have a totally separate program with the same ofstream-code, the only difference is that the code below is in separate files and the working program is all written in one single file. #include #include #include #include "hero.h" // Struct heroes as parameter to function new_hero void new_hero(heroes & myHero) { heroes strukt; std::cout strukt.name; std::cout
R.Englund
1

голосов
2

ответ
157

Просмотры

Swift: Необъявленная переменная с несколькими вариантами типа

Я учусь стриж через книгу App развития Apple. Существует проект по разработке Любимый спортсмен приложение для просмотра, добавления и редактирования спортсменов. Я интересно, если есть способ, чтобы иметь переменную в STRUCT / класса, который относится к типу, который зависит от буквального другой переменной .... Ок, так это то, что я имею в виду. перечисление лига {случай MLB, NFL, NBA} перечисление MLB {случай Выдерживает, янки, Red Sox} перечисление НФЛ {случай Соколов, гиганты, патриоты} перечисление NBA {случая Hawks, Никс, Celtics} структура Атлет {вар имени: String вар возраст : Int вар лига: Лига вар Команда: переключатель лига {случай .MLB: возвращение MLB перечислимого случай .NFL: возвращение NFL перечисления случай .NBA: возвращение NBA перечисления}}
Average_Pickle
1

голосов
2

ответ
201

Просмотры

Как обрабатывать член отступы в C структуры при чтении cffi.buffer с numpy.frombuffer?

Я должен прочитать массив структур C, возвращенных из DLL и преобразовать его в массив Numpy. Код использует модуль cffi Питона. Код работает до сих пор, но я не знаю, как обращаться с отступы члена в структуры, которые np.frombuffer сетует: ValueError: Размер буфера должен быть кратен элемента размера Это мой код: от cffi импорта FFI импорта NumPy, как НП з = «»»ЬурейеЙ структуры {Int А; ИНТ б; плавать с; двойной д; } MyStruct; ''»= FFI FFI () ffi.cdef (ов) разреш = [] #create массив и заполнить фиктивными данными для к в диапазоне (2): т = ffi.new ( "MyStruct *") ма = K = Мб к + 1 тс = к + 2,0 мкр = к + 3,0 res.append (м [0]) m_arr = ffi.new ( "MyStruct []", разреш) печати (m_arr) # DTYPE для структурированного массива в Numpy DT = [ ( 'а', 'I4'), ( 'B', 'i4'), ( 'с', 'f4'), ( 'd', 'f8')] размер # член, 20 байт печати ( 'размер, вручную', 4 + 4 + 4 + 8) # общий размер структуры, 24 байт печати ( 'SizeOf', ffi.sizeof (m_arr [0])) #reason является членом обивка в ЬиЕ = структуры ffi.buffer (m_arr) печати (BUF) х = np.frombuffer (ЬиЕ, DTYPE = дт) печать (х) Любые идеи, как справиться с этим в чистом виде? Edit: Это похоже на работу, если добавить дополнительный номер к DTYPE, где заполнение должно произойти: дт = [( «а», «i4»), ( «б», «i4»), ( «с» 'f4'), ( 'подушка', 'f4'), ( 'd', 'f8')] Почему отступы там происходят? (Win7, 64-разрядный, Python 3.4 64-бит). Но это не может быть лучшим способом.
Joe
1

голосов
0

ответ
38

Просмотры

Python3.4 упаковка и типа формата с структурой

У меня есть двоичный файл, который я пытаюсь воссоздать путем записи данных в новый файл. Данные, приведенные в нем должны быть сохранены как 32-бит (4 байта) twos- дополняют двоичные целые числа или в виде ASCII символов. Первый 4 байта должен представлять собой целое число 0, то следующие 4 должно быть целое числом 4, следующие 4 должно быть целое число 180. Следующий 4 байта мне нужно упаковать 014500, который представляет HourHourMinuteMinuteSecondSecond. Когда hexdumped, он должен выглядеть следующим образом: 0000000 0000 0000 0004 0000 0000 00B4 ccf8 0001 С последних двух столбцов, представляющих упакованную версию последних 4 байта. Я не могу повторить это. Я попытался упаковка в виде строки и как целое (удаление ведущего нуля для последнего). Я не знаю, что делать. Любые рекомендации будут оценены. Я на 64 битной RHEL Linux, работающая под управлением python3.4. Мой код: #! / USR / бен / python3.
wxman73
1

голосов
1

ответ
478

Просмотры

Unmarshal a YAML to a struct with unexpected fields in Go

Я столкнулся с проблемой при попытке распаковать на структуру с неэкспортируемым полем с помощью github.com/go-yaml/yaml. Структура выглядит следующим образом: тип Пример структура {строка ExportedField `YAML: "экспортируются поля"` OneMoreExported строку `YAML: "один-более-экспортируется"` unexportedField карты [строка] * AnotherExample `YAML: "неэкспортируемое поле"`} типа AnotherExample STRUCT {имени строка `YAML:«имя»`} И я хотел бы, чтобы распаковать такой YAML, как экспортируемые поля: Lorem Ipsum один-более экспортированный: Dolor набор неэкспортируемого-поле: что-то: имя: все, что я пытался обычай unmarshaler: FUNC (пример * Пример) UnmarshalYAML (распаковать FUNC (интерфейс {}) ошибка) ошибка {тип псевдонима Пример TMP: = структура {UnexportedField карта [строка] * AnotherExample `YAML:» unexportedField = tmp.UnexportedField} example.CopyJobNonNil (Пример (* tmp.Alias)) // Копирует все не нулевые поля от пройденного Пример возврата экземпляра ноль} TMP после вызова распаковать () не содержит каких-либо полей, но unexportedField - другие поля, кажется, быть опущены. Воспроизведен вопрос о Go Playground (хотя он не работает из-за зависимости): https://play.golang.org/p/XZg7tEPGXna unexportedField = tmp.UnexportedField} example.CopyJobNonNil (Пример (* tmp.Alias)) // Копирует все не нулевые поля от пройденного Пример возврата экземпляра ноль} TMP после вызова распаковать () не содержит каких-либо полей, но unexportedField - другие поля, кажется, быть опущены. Воспроизведен вопрос о Go Playground (хотя он не работает из-за зависимости): https://play.golang.org/p/XZg7tEPGXna
xaxes
1

голосов
0

ответ
205

Просмотры

Declare lifetime of output struct to be unrelated to inputs [duplicate]

This question already has an answer here: Return local String as a slice (&str) 3 answers Is there any way to return a reference to a variable created in a function? 2 answers I have defined two structs and a function in my Rust program, in which I am implementing my own linear algebra. While doing so I stumbled onto a gap in my knowledge of lifetimes in Rust. To my understanding, a lifetime annotation simply tells the compiler that one input variable must live at least as long as output variable. But now I am actually trying to tell the compiler that my output is NOT related to the input. Sure, I take in references, but the new struct is constructed by creating new slices, and filling these with new values (f64). So, my idea was that I have two inputs, whose lifetimes can be unrelated when the function is called, and a third one, saying it is unrelated to the inputs, because a new struct with no references to the old one is created. (See code below). Sadly, this returns an error, and to be perfectly honest, I have no idea what it really means. I mean, I can read the words and know these words, but it doesn't really fit in the idea of lifetimes I have in my head. I need a fresh new look on lifetimes, or someone to point out to me what I understood wrong. What I get from this is that it complains that my output is not related/constrained to the inputs, which is precisely what I want! error[E0207]: the lifetime parameter `'c` is not constrained by the impl trait, self type, or predicates --> src/mat.rs:199:14 | 199 | impl Mul> for &'b Matrix; fn mul(self, v: &'a ColVector) -> ColVector
spyduck
1

голосов
2

ответ
337

Просмотры

Как обновить массив с WritableKeyPath в Swift 4.0

В Swift 4.0, у меня есть массив структур. Есть ли способ использовать keyPaths обновить все элементы в массиве без использования вручную итерация, как карты или Foreach? Нечто похожее на ObjC [людей makeObjectsPerformSelector: @selector (SetName :) withObject: @ "обновленный"]; структура Person {имя вар: String? = "Пустой"} вар люди = [Person (), Person ()] // Это только один человек обновление: люди [ключевой путь:. \ [Person] [0] .name] = "одиночное обновление" // я в надеюсь сделать что-то вроде этого без карты пусть updatedPeople = people.map {(лицо: Person) -> человек в варе копии = лицо копию [ключевой ресурс: \ Person.name] = «обновленная» возвращение копия} что-то вроде людей [Ключевого путь : \ [Люди] .all.name] = "обновить все без вручную перебор"
joels
0

голосов
0

ответ
15

Просмотры

Golang: создать кусочек strutcs

Я хочу, чтобы создать список структур, которые могут быть возвращены функцией таким образом, как это в пакете гоу-GitHub. Но что такое правильный способ для создания и заполнения такого списка? Я нашел два способа, например, с помощью Append (): ... allowedRepos: = strings.Fields ( "repo1, repo2") actualRepos: = [] Repos {} actualRepos = присоединять (actualRepos, Repos {Name: "repo1" , URL: "gth.com/repo1"}) actualRepos = присоединять (actualRepos, Repos {Name: "repo2", URL: "gth.com/repo2"}) ... И «прямой инициализации: ... actualRepos: = [] {Repos Repos {Имя: "repo1", URL: "gth.com/repo1"}, {Имя Repos: "repo2", URL: "gth.com/repo2"},} Они работают, но и выглядеть немного неудобно и неправильно. Итак - что это лучший способ сделать это? Похоже, нужно создать его с помощью указателя, но не может заставить его работать.
setevoy
1

голосов
0

ответ
140

Просмотры

Ternary states for bool in Go struct (JSON tag)

типа Foo STRUCT {ID строки `JSON: "идентификатор" Состояние BOOL` JSON: "состояние, omitempty" `} Я хотел бы json.Marshal Foo структура выше, но поле Состояние должно иметь три состояния. Например, если я делаю маршалинга JSON: 1) Foo: = Foo {ID: "один", Состояние: правда,} должен превратиться в JSON: {ID: "один", "состояние": истинно} 2) Foo: = Foo {ID: "два", условие: ложно,} должен превратиться в JSON: {ID: "два", "состояние" ложь} 3) Foo: = Foo {ID: "три",} должен превратиться в JSON: {идентификатор: «три»} в настоящее время, если я 2), то выстраивали JSON будет { «ID»: «два»} вместо { «ID»: «два,» состояние "ложь}, так как нулевое значение BOOL ложно.
Jeffrey Yong
1

голосов
1

ответ
318

Просмотры

как удалить отступы в STRUCT питона во время распаковки

Когда я использую упаковки в структурах, я считаю, что при распаковке, что у меня есть лишние символы после того, как я распаковать объект байт. Например, прежде чем упаковка: C = b'CONNECT»значение получили после распаковки с помощью структуры является b'CONNECT \ x00 \ x00 \ x00 \ x00 \ x00' Вот мой код: импорт структура импорта DateTime импорта binascii string_format = '12s' ы = struct.Struct (string_format) ул = 'CONNECT' байт = str.encode () для печати (байт) packed_data = s.pack (байт) печати (packed_data) unpacked_data = s.unpack (packed_data) unpacked_data = unpacked_data [0] обр = [] для пункта в unpacked_data.decode (): печать (пункт) arr.append (пункт) печать (обр) Как я могу получить b'CONNECT»после распаковки.
Francis
1

голосов
0

ответ
77

Просмотры

How to perform bulk/matrix assignment to strucutre array in Matlab?

У меня есть структура массив, который имеет поле с большим количеством POSIX временные метки внутри: >> res.machineData ANS = 13 × 1 STRUCT массив с полями: ... FromDate ... Теперь я хочу, чтобы преобразовать их в DateTime. Хотя я знаю, как создать матрицу DateTimes >> DateTime ([res.machineData.fromDate] / 1000, 'ConvertFrom', 'posixtime') ANS = 1 × 13 DateTime столбцы массива 1 через ... Я не могу найти способ назначить его обратно к структуре: >> res.machineData.fromDate = DateTime ([res.machineData.fromDate] / 1000, 'ConvertFrom', 'posixtime'); Скалярная структуру, необходимая для этого задания. Другие ошибки сообщили о других синтаксисах я попробовал. Как добиться? UPDATE Я написал этот путь с Темп переменной: FromDate = num2cell (DateTime ([res.machineData.fromDate] / 1000, 'ConvertFrom', 'posixtime')); [Res.machineData.fromDate] = FromDate {:}; Это нормально? Можем ли мы написать короче?
Dims
1

голосов
0

ответ
50

Просмотры

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

У меня есть куча методов расширения на проверку определенных ниже. Они могут быть соединены друг с другом, и некоторые из них могут создавать новые экземпляры Check (потому что он неизменен сам по себе, но флаг _Success (и другие флаги не показано ниже), возможно, придется изменить). общественное чтение иой структуры Проверьте {общественного чтения T Value; BOOL чтения _Success; общественности Проверка (в T значение, BOOL успех = TRUE) {Value = значение; _Success = успех; }} Что касается меня, тот случай, когда T является типом значения, то есть больше, чем 8 байт (то есть пользовательские Struct, например). Есть ли способ, чтобы избежать копирования T экземпляра в поле Значение чека при создании нового экземпляра Check, и вместо того, чтобы иметь поле Значение только содержать ссылку на какой-то к примеру Т? В конце концов эта проверка должна быть только обертка предназначена для использования только в контексте стеки.
Fit Dev
1

голосов
1

ответ
29

Просмотры

Мимические struct.field с помощью отражения

Как я могу получить такое же значение, как reflect.TypeOf (struct.field) при использовании FieldByName, когда поле является типом интерфейса? Как видно здесь, если поле структуры представляет собой интерфейс, reflect.TypeOf (struct.field) дает мне конкретный тип, но reflect.ValueOf (структура) .FieldByName ( «поле»). Тип () дает мне интерфейс. Можно ли получить конкретный тип, хранящийся в struct.field с использованием отражения, если все у меня есть структура и «поле»?
Soumya
1

голосов
1

ответ
54

Просмотры

Неизвестно длина и несколько требований для ввода

Я работаю с структуры под названием цель, которая состоит из имени полукокса с макс 8000 символов (большую часть времени будет гораздо меньше), в Int идентификатор, с длительностью INT и массив целых чисел называется Deps, которые могут иметь от 0 до 9000 элементов. Вот оно: ЬурейеЕ структуры {неподписанных долгое идентификатор, продолжительность, отд [9000]; Имя символа [MAXNAME]; } Цель у меня есть некоторые функции для работы с этой структурой, я могу добавить один, можно удалить, можно распечатать и т.д., мне нужно использовать терминал, чтобы указать, что я хочу сделать, например, для добавления цели мне нужно написать на терминал «добавить ИД„название“продолжительность DEPS». Так что это, где начинается моя проблема, во имя цели, она должна быть между «», если не команда не действует. Я также возникли проблемы с DEPS массива, она может иметь от 0 до 9000 элементов, так что я никогда не знаю, сколько есть, я должен поместить их в массив, который будет Deps от цели. Я также не могу поставить два пробела между аргументами. Некоторые примеры входных линий: "добавить 1 "objective1" 20 2 3 4 5" - это добавляет объектив с идентификатором 1, имя "objective1", продолжительность 20 и DEPS 2, 3, 4 и 5 «добавить 1 objective1 20 2 3 4 5" - это недопустимо, так как имя не между „“ „добавить 1„objective1“20“ - это добавляет объектив с идентификатором 1, имя „objective1“, продолжительность 20 и не DEPS „REMOVE 1“ - удаляет цель с идентификатором 1 у меня это от предыдущей работы с помощью fgets: ввод обугленного [82], Col [6], на [80]; без знака длиной а, б; двойные с; в то время как (вход [0]! = 'д') {если (fgets (вход, SizeOf (вход), STDIN)) {если (вход [0] == 'р' && вход [1] == '\ п' && вход [2] == '\ 0') {список (матрица); } Иначе, если (вход [0] == 'я' && входной [1] == '\ п' && вход [2] == '\ 0') {Carac (матрицу); } Иначе, если ((sscanf (вход, "% C% лу% лу% Л.Ф. \ п", и вход [0], & а, & Ь, & с) == 4)) {добавляет (а, б, в, матрица); } Иначе, если (вход [0] == 'л' && (sscanf (вход, "% * C% л \ п", & а) == 1)) {Printline (а, матрица); } Иначе, если (вход [0] == 'с' && (sscanf (вход, "% * C% лу \ п", & а) == 1)) {printColumn (а, матрица); } Иначе, если (вход [0] == 'г' && (sscanf (вход, "% * C% Л.Ф. \ п", и с) == 1)) {ноль (с, матрица); } Иначе, если (вход [0] == 'о' && вход [1] == '\ п' && вход [2] == '\ 0') {sortLine (матрица); } Иначе, если (вход [0] == 'о' && (sscanf (вход, "% * C% s \ п", столбец) == 1) && зЬгстр (колонка "колонна") == 0) {sortColumn (матрица); } Иначе, если (вход [0] == 'W' && вход [1] == '\ п' && вход [2] == '\ 0') {файл (матрица); } Иначе, если (вход [0] == 'W' && (sscanf (вход, "% * C% s \ п", па) == 1)) {NewFile (па, матрица); }}} Но в этом случае она должна быть сильно отличается, название между «», неизвестное число DEPS элементов и пробелов между аргументами делают это очень трудно для меня,
MuchoG
1

голосов
0

ответ
72

Просмотры

свободный () в С на структуры генерирует контрольную точку без какого-либо кода ошибки

I'm trying to create a linked list of users in a social network in c. I have 2 modules: User - a struct which contains a username (char), number of friends(int) and a linked list of friends (each block in the list contains a name and a pointer to next friend of the User).the User module has methods to add a friend to the list and to remove. 2.Social network - general module to organize users. it contains a linked list of Users.the methods here control the users. It adds friends as part of add relationship function. it calls to the user methods and manages the users as part of the encapsulation rules. I use malloc for the structs and chars. I eventually use free on those mallocs at the end of the program using functions such as Network_delete() and UserDelete(..) I encounter an error while calling to free in Network_delete() function (breakpoint with no error code - not even heap related) and I can't figure out the issue. I use well-defined rules of the use of malloc but maybe I'm wrong in the assignment. comment: def.h contains the Result enum used in the modules. the modules: User.h #ifndef _USER_H_ #define _USER_H_ #include "defs.h" typedef struct LINKED_LIST* L_list; typedef struct user_t *PUser; PUser User_Create(char* name); void User_Delete(PUser pUser); Result User_addFriend(PUser pUser, char* name); Result User_removeFriend(PUser pUser, char* name); char* User_getName(PUser pUser); L_list User_getFriendsList(PUser pUser); int User_getFriendsNum(PUser pUser); #endif /* _USER_H_ */ User.c #include "User.h" #include #include #include // linked list typedef struct LINKED_LIST { char* name; struct LINKED_LIST* pNext; }L_L; // user struct- include the user name,number of his friends and a list of his friends typedef struct user_t { char* name; L_list friends_list; int friends_num; }USER; // user creator PUser User_Create(char* name) { if (!name) return NULL; PUser pUser; pUser = (PUser)malloc(sizeof(USER)); if (pUser == NULL) return NULL; if(!(pUser->name = (char*)malloc(1 +strlen(name)))) { free(pUser); return NULL; } pUser->friends_list = NULL; pUser->friends_num = 0; strcpy(pUser->name, name); return pUser; } // user destructor-delete the user and his friends list void User_Delete(PUser pUser) { if (!pUser) return; L_list current = pUser->friends_list; L_list to_delete = current; while (current) { current = current->pNext; free(to_delete->name); free(to_delete); } pUser->friends_list = NULL; free(pUser->name); free(pUser); } //add new friend to the friends list Result User_addFriend(PUser pUser, char* name) { if (!pUser||!name) return FAILURE; L_list current = pUser->friends_list; while (current) { if (strcmp(name, current->name)==0) { return FAILURE; } current = current->pNext; } L_list new_list_element = (L_list)malloc(sizeof(L_L)); if (!new_list_element) return FAILURE; if (!(new_list_element->name = (char*)malloc(1 + strlen(name)))) { free(new_list_element); return FAILURE; } strcpy( new_list_element->name ,name); new_list_element->pNext = pUser->friends_list; pUser->friends_list = new_list_element; pUser->friends_num++; return SUCCESS; } //remove friends from the friends list Result User_removeFriend(PUser pUser, char* name) { if (!pUser || !name) return FAILURE; L_list current = pUser->friends_list; L_list before_current = pUser->friends_list; while (current) { if (strcmp(current->name, name) == 0) { before_current->pNext = current->pNext; free(current->name); free(current); pUser->friends_num--; return SUCCESS; } before_current = current; current = current->pNext; } return FAILURE; } //get the user name char* User_getName(PUser pUser) { if (!pUser) return NULL; return pUser->name; } //get the first friend on the list L_list User_getFriendsList(PUser pUser) { if (!pUser) return NULL; return pUser->friends_list; } //get the user number of frinds int User_getFriendsNum(PUser pUser) { if (!pUser) return 0; return pUser->friends_num; } } Socialnetwork.h #ifndef _SOCIAL_NETWORK_H_ #define _SOCIAL_NETWORK_H_ #include "User.h" typedef struct LINKED_LIST_SN* social_network_elem;// a list for social network Result Network_addUser(char* member_invite, char* new_member); Result Network_addRelationship(char* member1, char* member2); Result Network_removeRelationship(char* member1, char* member2); void Network_delete(); #endif /* _SOCIAL_NETWORK_H_ */ Socialnetwork.c #include "SocialNetwork.h" #include #include #include #include "User.h" typedef struct LINKED_LIST_SN { PUser pUser; struct LINKED_LIST_SN* pNext; }S_N_L; social_network_elem pSocial_network; //adding new user to the network Result Network_addUser(char* member_invite, char* new_member) { if (!member_invite && !new_member) return FAILURE;//bad input if (!new_member&&(pSocial_network!=NULL)) return FAILURE; if (!member_invite&&new_member)//first member { pSocial_network = (social_network_elem)malloc(sizeof(S_N_L)); if (!pSocial_network) return FAILURE; pSocial_network->pUser = User_Create(new_member); pSocial_network->pNext = NULL; return SUCCESS; } social_network_elem current = pSocial_network; PUser pMember_invite=NULL; while (current) { if (strcmp(new_member, User_getName(current->pUser)) == 0)//new_member already in social network { return FAILURE; } if (strcmp(member_invite, User_getName(current->pUser)) == 0)//apdating pointer to the member who invited { pMember_invite = current->pUser; } current = current->pNext; } if (!pMember_invite) return FAILURE; //no inviting member found in network social_network_elem pNew_social_network_elem; pNew_social_network_elem = (social_network_elem)malloc(sizeof(S_N_L)); if (!pNew_social_network_elem) return FAILURE; pNew_social_network_elem->pUser = User_Create(new_member); if (!pNew_social_network_elem->pUser) return FAILURE; pNew_social_network_elem->pNext = pSocial_network; pSocial_network = pNew_social_network_elem; if (!Network_addRelationship(new_member, member_invite)) { pNew_social_network_elem = pSocial_network; pSocial_network = pSocial_network->pNext; User_Delete(pNew_social_network_elem->pUser); free(pNew_social_network_elem); return FAILURE; } return SUCCESS; } Result Network_addRelationship(char* member1, char* member2) { if (!member1 || !member2) return FAILURE; PUser pMember1 = NULL; PUser pMember2 = NULL; social_network_elem current = pSocial_network; while (current) { if (strcmp(member1, User_getName(current->pUser)) == 0)//we found member 1 { pMember1 = current->pUser; } if (strcmp(member2, User_getName(current->pUser)) == 0)//we found member 2 { pMember2 = current->pUser; } current = current->pNext; } if (!pMember1 || !pMember2) return FAILURE;//one of the mambers not in the list if (!User_addFriend(pMember1, member2)) return FAILURE;//create relationship failed if (!User_addFriend(pMember2, member1)) { User_removeFriend(pMember1, member2); return FAILURE; } return SUCCESS; } Result Network_removeRelationship(char* member1, char* member2) { if (!member1 || !member2) return FAILURE; PUser pMember1 = NULL; PUser pMember2 = NULL; social_network_elem current = pSocial_network; while (current) { if (strcmp(member1, User_getName(current->pUser)) == 0)//we found member 1 { pMember1 = current->pUser; } if (strcmp(member2, User_getName(current->pUser)) == 0)//we found member 2 { pMember2 = current->pUser; } current = current->pNext; } if (!pMember1 || !pMember2) return FAILURE;//one of the mambers not in the list if (User_getFriendsNum(pMember1) pUser); free(current); current = tmp; } } I have errors in the call to free in the following functions: Network_delete() the other calls for free give no error. furthermore, I use Valgrind in Unix environment for memory violation and debug and it seems like the mallocs create blocks in a different size to the types it contains.
Zuser
1

голосов
1

ответ
404

Просмотры

Как получить широту и долготу от Google Map API с использованием языка идти?

Как получить «лат» и «LNG» с места в геометрии с использованием языка идти? Я пытаюсь получить широту и долготу, чтобы использовать его для следующего API для извлечения метеоданного конкретного места. Я получаю сообщение об ошибке при выполнении кода: панический: Ошибка: индекс вне диапазона Мой ответ выглядит следующим образом: https://developers.google.com/maps/documentation/geocoding/start Мой код находится здесь. пакет основного импорта ( «ОС» «FMT» «сеть / HTTP» «Журнал» «кодирование / JSON», «-й / ioutil») сопзИте helloMessage = «Привет программы погоды. Пожалуйста, введите название города и погода будет шоу." Const googleApiUri = "https://maps.googleapis.com/maps/api/geocode/json?key=MYKEY&address=" тип googleApiResponse Struct {Результаты Результаты `JSON:»
1

голосов
1

ответ
79

Просмотры

Parse yaml error for map

I've the following program in which I need to parse yaml with the following structure https://codebeautify.org/yaml-validator/cbabd352 this is valid yaml and I use byte to make it more simple maybe the indentation was changed during the copy paste to the question but you can see in the link that the yaml is valid The yaml have an api_version and runners, for each runner (key which is name) I've a list of commands and I need to print those commands for function1 and function4 ,what am I doing wrong here ? package main import ( "fmt" "log" "gopkg.in/yaml.v2" ) var runContent = []byte(` api_ver: 1 runners: - name: function1 type: - command: spawn child process - command: build - command: gulp - name: function2 type: - command: run function 1 - name: function3 type: - command: ruby build - name: function4 type: - command: go build `) type Result struct { Version string `yaml:"api_ver"` Runners []Runners `yaml:"runners"` } type Runners struct { Name string `yaml:"name"` Type []Command `yaml:"type"` } type Command struct { Command string `yaml:"command"` } func main() { var runners []Result err := yaml.Unmarshal(runContent, &runners) if err != nil { log.Fatalf("Error : %v", err) } fmt.Printf("%+v", runners[0]) } The error which I got cannot unmarshal !!map into []main.Result I cannot change the yaml and it should be exactly like this https://codebeautify.org/yaml-validator/cbabd352 This is the code https://play.golang.org/p/zidjOA6-gc7
1

голосов
2

ответ
50

Просмотры

Проблема пытается использовать переменную STRUCT

Я учусь программированию на языке С, и я пытаюсь сделать простую программу для хранения точек в плоскости XY. Сначала я сделал это следующим образом: #include #include точки ЬурейиХ структур {поплавок х, у; } ПНТ; ЬурейаЯ структура плоскость {INT n_points; ПНТ пт [50]; } самолет; points_input недействительными (плоскость planexy); points_distance недействительными (плоскость planexy); INT основных () {плоскость planexy; Е ( «Сколько баллов вы хотите ввести?»); зсапЕ ( "% d", & planexy.n_points); points_input (planexy); points_distance (planexy); } Пустота points_input (плоскость planexy) {INT I; для (я = 0; г <planexy.n_points; я ++) {Е ( "\ nВведите координата при х% D", I); зсапЕ ( "% F", & planexy.pt [я] .x); Е ( «\ nВведите координату для у% D», я); зсапЕ ( "% F", & planexy.pt [I]. у); система ( "ЦБС"); }} Пустот points_distance (плоскость planexy) {INT I; Е ( «Выберите первый пункт: \ п»); для (я = 0; г <planexy.n_points; я ++) {Е ( "\ п% г (% 1f,% 1f)...", я, planexy.pt [я] .x, planexy.pt [я ] .y); }} И это не работает, когда я пытаюсь получить доступ к одной из переменных точки она всегда возвращает 0. После баловаться с именем переменной «planexy» и использовать его в качестве вектора размера 1, а затем, используя все упоминает о нем, как planexy [0], он вдруг начал работать: #include #include ЬурейеЙ точка структуры {флоит х, у; } ПНТ; ЬурейаЯ структура плоскость {INT n_points; ПНТ пт [50]; } самолет; пустота points_input (плоскость planexy []); пустота points_distance (плоскость planexy []); INT основных () {плоскость planexy [1]; Е ( «Сколько баллов вы хотите ввести?»); зсапЕ ( "% d", & planexy [0] .n_points); points_input (planexy); points_distance (planexy); } Пустота points_input (плоскость planexy []) {INT I; для (я = 0; г <planexy [0] .n_points; я ++) {Е ( "\ nВведите координата при х% D", I); зсапЕ ( "% F", & planexy [0] .pt [I] .x); Е ( «\ nВведите координату для у% D», я); зсапЕ ( "% F", & planexy [0] .pt [I] .y); система ( "ЦБС"); }} Пустот points_distance (плоскость planexy []) {INT I; Е ( «Выберите первый пункт: \ п»); для (я = 0; г <planexy [0] .n_points; я ++) {Е ( ". \ п% г (% 1f,% 1f).", я, planexy [0] .pt [I] .x , planexy [0] .pt [I] .y); }} Теперь, этот код работает, но я не знаю, почему я должен был поставить его таким образом, чтобы он действовал, и это Безразлично» т кажется, что это хороший код. Я понимаю, что если я хочу использовать несколько плоскостей «XY» я должен хранить переменную как вектор, но я просто хочу, чтобы использовать один, я не понимаю, почему это работает, когда я использую вектор размером 1, но это Безразлично» т, когда я просто хочу, чтобы использовать одну переменную для хранения одной плоскости. Что случилось с первым подходом? Извините за плохой английский.
Ragde Nutzer
1

голосов
1

ответ
61

Просмотры

Нефтепереработка Swift API функции GET

Я работаю на практике проект, в котором приложение IOS печатает список / сообщений из jsonplaceholder.typicode.com, и когда пользователь выбирает один контроллер детальный вид загружается и отображается дополнительная информация о том, что пост (автор и ряд Комментарии). Я сделал три отдельные запросы GET для трех различных конечных точек, так как каждый из них требует различных типов возвращаемых и различных параметров (или вообще). Я хотел взять столько кода, как это возможно, что это общего между тремя и поместить его в новой функции, чтобы привести в порядок класса, но я чувствую, что я мог бы сделать гораздо больше. Есть ли способ, чтобы сделать тип возврата этих структур более общих, с коммутатором, чтобы определить, чтобы отобразить ответ JSon на? Любое руководство будет высоко оценен. Импорт UIKit STRUCT сообщение: Кодируемый {пусть USERID: Int пусть ID:
eoin
1

голосов
0

ответ
68

Просмотры

how should is properly use this array of struct

Я извиняюсь, если мой плохой английский, я пытался программы, которые используют для calc_vet_struct попытаться найти первый номер больше, чем предыдущий, мой код для структуры и определить это: constexpr Int N = 50; Dati структура {поплавок Val; INT rig1; INT col1; }; DATI VS определение типа во [п]; и я declered В.С. calc_vett_struct (мат, Int, Int); как моя подпрограмма, то в моем главном назвали это делать: VS S; S = calc_vett_struct (м, буровая установка, Col); и создал его таким образом: VS calc_vett_struct (мат м, ИНТ вышки, внутр Col) {VS р; для (INT I = 0; г <вышка; я ++) {BOOL найдено = ложь; для (Int J = 0; J <Col - 1; j ++) {если (м [I] [J]> т [I] [J + 1] && найдено = истинно) {р [я] .val = т [ я] [J]; р [я] .rig1 = я; р [я] .col1 = J; нашел = истина; }}} Возвращение р; } Надежда достаточно understandble и надеюсь, что вы можете мне помочь, если что-то не ясно, пожалуйста, обращайтесь. ошибка: функция не может возвращать матрицу
Denis Pashkov
1

голосов
1

ответ
48

Просмотры

Как я могу сделать переменные моей структуры, видимый со всех функций?

Таким образом, мое назначение в классе было сделать программу на C ++, которая по существу делает базу данных несколько вариантов (добавление к нему, удаление записей, изменение, поиск и распечатка). Это должно быть сделано специально с массивами, а не векторы или классов или любой другой. Я решил сделать целый ряд функций для обработки каждой опции, и они все обращаются друг к другу. После обширного Googling, я решил позволить структуру обработки деклараций, так что я могу использовать их во всех функциях без использования :: знаков. Я специально сделал все зависят друг от друга, потому что учитель дал понять, что мы будем иметь, чтобы продолжить работу с ним, так что, если я что-то изменить, все остальное изменения, чтобы приспособить. # include # include # include используя патезрасе; структура в {общественность: Int I, J, K, L; // для возможных петель или переменных, мне нужно только на очень короткий промежуток времени, Int J = 0; Имя INT = ID + 1; // как 6 других Интс Я также объявленные здесь, в том числе YEAR2 Int Ачей = года2 + 1; // выше для облегчения идентификации про [безотносительно] [необходимые данные]. Метод +1 является возможность для более легкого редактирования позже. INT размер = 20, строка = 0; // Это важно для добавления строки SEARCHTERM = «»; // это для поиска общественности: ИНТ основной (); аннулированию MainMenu (); Дополнение к аннулированию (); аннулирование удалений (); аннулируются Search (); аннулированию Modify (); аннулируются List (); }; аннулированию MainMenu (); Дополнение к аннулированию (); аннулирование удалений (); аннулируются Search (); аннулированию Modify (); аннулируются List (); // Я просто найти его аккуратнее, чтобы боковые функции после того, как основной. INT основных () {Setlocale (LC_ALL, ""); Const INT = столбец ACHI; Const INT initsize = размер; // Эти два так я могу изменить размер массива из структуры непосредственно строка про [initsize] [столбец]; // Это создает массив, что это фактическая соиЬ базы данных
Vievin
1

голосов
0

ответ
47

Просмотры

Free double pointer struct

Я хочу поставить все MinHeapNode в массив и освободить их после того, как программа выполняется их печать. Вот код, который создает массив и освобождает его: недействительный HuffmanCodes (ИНТ данные [], Int частота [], Int размера) {структура MinHeap * ясно; INT s = 0; структура MinHeapNode * узлы = таНос (SizeOf (структура MinHeapNode) * ((4 * 2) - 1)); структура MinHeapNode * корень = buildHuffmanTree (данные, частота, размер, и ясно); INT обр [MAX_TREE_HT], сверху = 0; printCodes (корень, обр, топ, и узлы, и с); Int я; для (I = 0; г <с; я ++) {свободный (узлы [I]); } свободные (узлы); бесплатно (clear-> массив); бесплатно (ясно); } Вот код, который захватывает каждый MinHeapNode и помещает его в узлы недействительными printCodes (структура MinHeapNode * корень, Int обр [], Int сверху, структура MinHeapNode ** узлов, INT * s) {если (корне-> слева) {обр [сверху] = 0; printCodes (корне-> левый, обр, топ + 1, узлы, с); } Если (корне-> справа) {обр [сверху] = 1; printCodes (корне-> правый, обр, верхняя часть + 1, узлы, с); } Если (IsLeaf (корень)) {Е ( "% D:", Root-> данные); printArr (обр, сверху); } узлы [* с] = корень; * С ++; } Замена последние две строки printCodes с «свободной (корень);» работает, но я хотел, чтобы освободить его вне функции. с); } Если (IsLeaf (корень)) {Е ( "% D:", Root-> данные); printArr (обр, сверху); } узлы [* с] = корень; * С ++; } Замена последние две строки printCodes с «свободной (корень);» работает, но я хотел, чтобы освободить его вне функции. с); } Если (IsLeaf (корень)) {Е ( "% D:", Root-> данные); printArr (обр, сверху); } узлы [* с] = корень; * С ++; } Замена последние две строки printCodes с «свободной (корень);» работает, но я хотел, чтобы освободить его вне функции.
Garrett Ewens
1

голосов
0

ответ
47

Просмотры

Как вывести вектор вдвое? И остановить до моего целого

Как вывести вектор вдвое? И остановить до моего целого. У меня есть список с номером переменной длины говорят :(! Ж / строк) 325 25 25 25 50 255 255 255 255 0,3 0,7 2 И я уже принял набран до 0,3, но теперь я хочу, чтобы сохранить 0,3 0,7 в вектор, но сохранить 2 в виде целого числа для дальнейшего использования. Я попытался с нажать значение, но я не знаю, как остановить. Потому что моя длина любой строки может изменяться в соответствии с планом. Я толкаю все в структуре для простоты использования (может быть?) ЬурейиМ вектор PIXEL; структура Donnee {INT цвет; PIXEL цвет; векторные значения; INT фильтр;}; INT Главный {Donnee Donnee} аннулируются вход (Donnee & Donnee) {CIN >> Donnee.color; Donnee.colour = Couleur (Donnee.color); // это вектор по размеру Donnee.color CIN >> // где я хочу, чтобы мой двойной CIN значение >> // где я хочу, чтобы мой ИНТ Есть ли способ без использования строки и GetLine или это necassary здесь? Спасибо и извините за плохой английский.
Kevernier
1

голосов
1

ответ
195

Просмотры

Присвоение выражения с ошибкой типа массива

В этой программе я пытаюсь сортировать сбережения клиентов по убыванию. И я попытался скомпилировать код. И я до сих пор не понимаю, о указателе. Существует ошибка с сообщением «Присвоение выражения с ошибкой типа массива». Целевой вывод этой программы, как правило, отсортированные клиенты (с их именами и номерами счетов). Я поиск в интернете об этой ошибке. Но я до сих пор не получить решение. Может кто-то помочь мне решить эту ошибку? Благодарю. #include #include структура данных {длинные длинные INT Экономия [100], AccNo [100]; символ Наименование [100]; }; ИНТ основной () {структура данных * PTR; Int N, I, J, своп = 1, х, у; долго долго ИНТ макс, мин, темп; Е ( «Введите число клиента (ов):»); зсапЕ ( "% d", & п); PTR = (структура данных *) таНос (п * SizeOf (структура данных)); для (я = 0; <п; я ++) {Е ( "Введите клиента% D", г + 1); Е ( "\ NNAME:"); GetChar (); зсапЕ ( "% [^ \ п] ы", & (PTR + I) -> Имя); Е ( "Экономия:"); зсапЕ ( "% d", & (PTR + I) -> Экономия); Е ( "Номер счета:"); зсапЕ ( "% d", & (PTR + I) -> AccNo); Е ( "\ п"); } // Сортировка BubbleSort для (х = 0, х <п; х ++) {для (у = 0; у <(п - х - 1); у ++) {если ((PTR + у) -> Экономия> (PTR + у + 1) -> Экономия) {темп = (PTR + у) -> Экономия; (PTR + у) -> Экономия = (PTR + у + 1) -> Экономия; (PTR + у + 1) -> Экономия = темп; }}} // Печать отсортирован Е ( "\ п клиенты Отсортированные являются (: \ п"); для (я = 0; <п; ++ я) {Е ( "% s \ п", (PTR + я) -> Name); Е ( "% d \ п", (PTR + I) -> Экономия); } Свободный (PTR); возвращать 0; }
SALOMO
1

голосов
1

ответ
50

Просмотры

Why aren't my variables being saved? I've been testing this code and my variables aren't being saved into my struct array

Вот мой код и вывод из моих переменных: Что еще мне нужно, чтобы добавить к моему время цикла, так что я могу иметь свои переменные и методы работы. INT основных () {FILE * IFP; IFP = Еореп ( "processes.txt", "г"); если (IFP == NULL) {Е ( "Ошибка открытия файла \ п."); выход (1); } Символ ул [100]; INT = 0; в то время как (fgets (ул, 100, IFP)! = NULL) {fscanf (IFP, "% d% 0.1f% D% D", и обр [I] .pid, и обр [I] .at, и обр [I]. продолжительность, и обр [I] .rank); я ++; }} Е ( "ProceId AT длительность ранга \ п"); для (Int J = 0; J <я - 1; ++ к) {Е ( "% d \ т% 0.1f \ т% d \ т% г \ п", обр [J] .pid, обр [у ] .AT, обр [J] .duration, обр [J] .rank); } ProceId при длительности ранга 1398 0,0 0 0 0,0 0 2306 0 3219 0 0 0,0 4478 0,0 0 0 0 5653. 0 0 0 6399 0 0 0,0 7777 0,0 0 0 Вот файл, который имеет ряд строк, которые я не нужна, поэтому я использовал fgets. ProcessID ArrTime Длительность Ранг 1398 1,0 16 3 2306 4,5 6 7 3219 11 3,0 1 2,0 4478 3 5 5653 3,5 7 2 6399 4.0 8 6 7777 2,5 17 8
1

голосов
1

ответ
53

Просмотры

Как реализовать общий связанный список в с

Я хочу, чтобы создать общий связанный список в с, то ниже, как я создал это, но я не уверен, что это правильный способ сделать это, я выделяю новую память в куче для STRUCT uniqueOrderedList_t, а затем выделить новая память в куче, а для элемента, как я хочу, чтобы это было общим, является то, что правильный способ сделать это? и насчет «следующего указателя», мне нужно выделить память для него, а? #The .h файл содержит: ЬурейиЕ пустоты * Element; ЬурейиЕ структур uniqueOrderedList_t * UniqueOrderedList; UniqueOrderedList uniqueOrderedListCreate (/ * некоторые параметры * /); #The .c файл: STRUCT uniqueOrderedList_t {элемент Element; структура uniqueOrderedList_t * рядом; }; uniqueOrderedList uniqueOrderedListCreate (/ * некоторые аргументы * /) {UniqueOrderedList NewList = таНос (SizeOf (* NewList)); если (NewList!) {возвращение NULL; } NewLust-> Элемент = таНос (SizeOf (элемент)); если (! элемент) {возвращают NULL; } NewList-> следующая = NULL; }
D.A
1

голосов
1

ответ
37

Просмотры

Rpn calculator: How to free an element that was popped from the stack?

I will first add my code: typedef struct _stack stack; typedef struct _stack_element stack_element; struct _stack { stack_element* top; }; struct _stack_element { stack_element* next; float value; }; void stack_push(stack* astack, float value) { struct _stack_element *elem=calloc(1,sizeof(stack_element)); elem->value=value; if(astack->top==NULL){ astack->top=elem; } else{ elem->next=astack->top; astack->top=elem; } } float stack_pop(stack* astack) { float Number; if(astack==NULL){ Number=NAN; return Number; } else{ Number=astack->top->value; astack->top=astack->top->next; } return Number; } void process(stack* astack, char* token) { /* HIER implementieren */ // printf("\n\n"); if(is_number(token)==1){ float number=atof(token); stack_push(astack, number); } if(is_add(token)==1){ float Number1=stack_pop(astack); float Number2=stack_pop(astack); float result=Number1+Number2; stack_push(astack, result); } if(is_sub(token)==1){ float Number1=stack_pop(astack); float Number2=stack_pop(astack); float result=Number2-Number1; stack_push(astack, result); } if(is_mult(token)==1){ float Number1=stack_pop(astack); float Number2=stack_pop(astack); float result=Number1*Number2; stack_push(astack, result); } return; } void print_stack(stack *astack) { int counter = 0; printf("\n |xxxxx|xxxxxxxxxxxxxxxxxxx|xxxxxxxxxxxxxxxxxxx|xxxxxxxxx|\n"); printf(" | Nr. | Adresse | Next | Wert |\n"); printf(" |-----|-------------------|-------------------|---------|\n"); for (stack_element* elem=astack->top; elem != NULL; elem = elem->next) { printf(" | %3d | %17p | %17p | %7.3f |\n", counter, elem, elem->next, elem->value); counter++; } printf(" |xxxxx|xxxxxxxxxxxxxxxxxxx|xxxxxxxxxxxxxxxxxxx|xxxxxxxxx|\n"); } stack* stack_erstellen() { struct _stack* Stack =(struct _stack*)calloc(1, sizeof(struct _stack)); Stack->top=NULL; return Stack; } int main(int argc, char** args) { stack* astack = stack_erstellen(); char zeile[MAX_STR]; char* token; intro(); while (taschenrechner_input(zeile) == 0) { // Erstes Token einlesen token = strtok(zeile, " "); while (token != NULL) { printf("Token: %s\n", token); // Stackoperationen durchführen return; process(astack, token); // Nächstes Token einlesen token = strtok(NULL, " "); print_stack(astack); } printf("\nExtrahiere Resultat\n"); float result = stack_pop(astack); print_stack(astack); if (astack->top != NULL) { while (astack->top != NULL) { stack_pop(astack); //Räume Stack auf } printf("\nDoes not Compute: Stack nicht leer!\n"); } else if (result != result) { printf("\nDoes not Compute: Berechnung fehlgeschlagen!\n"); } else { printf("\nDein Ergebnis:\t%7.3f\n\n", result); } } free(astack); } I am new to coding. The code above is from a assignment for university. The function I had to create are: void stack_push(stack* astack, float value) void stack_pop(stack* astack) void process (stack* astack, char* token) stack* stack_erstellen() (this translated to "create_stack") There is also another c file that is compiled together with this one but I am not allowed to change anything in so I did not add it to this post. The calculator seems to work fine and the print_stack() function also suggests that the push and pop functions work as expected. My problem is that I am not sure how to free the memory in the pop function that allocated in the push function. How do I free the elements of my stack? am knew to describing technical problems like this so If anything lacks I'll gladly add more information.
Mulch
1

голосов
3

ответ
56

Просмотры

Динамический массив структур в C (таНос, перераспределить)

Я пытаюсь создать массив элементов структуры и перераспределить если нужны новые элементы. Массив должен быть указатель, потому что я хочу, чтобы вернуть его из функции. У меня есть следующий код: #include #include STRUCT rle_element {Int длина; голец характер; }; get_rle недействительными () {структура rle_element * RLE = таНос (SizeOf (структура rle_element *)); структура rle_element ** rle_pointer = & RLE; RLE = перераспределить (RLE, SizeOf (RLE) + SizeOf (структура rle_element *)); (* Rle_pointer) -> длина = 10; Е ( "% d \ п", (* rle_pointer) -> длина); rle_pointer = & RLE + 1; (* Rle_pointer) -> длина = 20; Е ( "% d \ п", (* rle_pointer) -> длина); } INT основных () {get_rle (); вернуться EXIT_SUCCESS; } Но этот код на самом деле не работает. Я думаю, что перераспределять не прав. Теперь у меня есть следующий код, который работает отлично. Но я могу также использовать RLE [2] или RLE [3] без выделения. Я думаю, что моя программа только выделить пространство для двух элементов. # include # include структура rle_element {INT длина; голец характер; }; get_rle недействительными () {структура rle_element * RLE = таНос (SizeOf (структура rle_element)); структура rle_element ** rle_pointer = & RLE; RLE = перераспределить (RLE, SizeOf (RLE) + SizeOf (структура rle_element)); RLE [0] .length = 10; Е ( "% d \ п", RLE [0] .length); RLE [1] .length = 20; Е ( "% d \ п", RLE [1] .length); } INT основных () {get_rle (); вернуться EXIT_SUCCESS; } # include # include структура rle_element {INT длина; голец характер; }; get_rle недействительными () {структура rle_element * RLE = таНос (SizeOf (структура rle_element)); структура rle_element ** rle_pointer = & RLE; RLE = перераспределить (RLE, SizeOf (RLE) + SizeOf (структура rle_element)); RLE [0] .length = 10; Е ( "% d \ п", RLE [0] .length); RLE [1] .length = 20; Е ( "% d \ п", RLE [1] .length); } INT основных () {get_rle (); вернуться EXIT_SUCCESS; } # include # include структура rle_element {INT длина; голец характер; }; get_rle недействительными () {структура rle_element * RLE = таНос (SizeOf (структура rle_element)); структура rle_element ** rle_pointer = & RLE; RLE = перераспределить (RLE, SizeOf (RLE) + SizeOf (структура rle_element)); RLE [0] .length = 10; Е ( "% d \ п", RLE [0] .length); RLE [1] .length = 20; Е ( "% d \ п", RLE [1] .length); } INT основных () {get_rle (); вернуться EXIT_SUCCESS; }
Moschte
1

голосов
1

ответ
59

Просмотры

Как петля через статический constatns образом структуры?

Я использую R.swift, чтобы получить имена активов. Я создаю библиотеку для проверки дубликатов активов и хочу перебрать все имена активов для извлечения данных для проверки duplicacy из assets.How может я перебирать статики в стриже. структура изображение {статические пусть winnerPunyaOrang = Rswift.ImageResource (расслоение: R.hostingBundle, имя: "Победитель Пунья Орангутан") статическое пусть fire_ico = Rswift.ImageResource (расслоение: R.hostingBundle, название: "fire_ico") статический пусть огнь = Rswift .ImageResource (расслоение: R.hostingBundle, название: "огонь")}
Arnav
1

голосов
1

ответ
54

Просмотры

Массив указателей, указывающих структуры

Моя структура такова: ЬурейаЯ структура celltag {имя символа [11]; двойное время; структура celltag * рядом; } Типом клеток; И структуры этого типа сохраняются в массиве связанных списков: ЬурейеЕ ** Hash типа клеток; и две структуры X и Y связаны в том же списке, если для некоторой заданной функции Н (полукокса [] х), ч (Х-> имя) = H (Y-> имя). То, что я пытаюсь сказать, что эти структуры сортируются в массив их «имена». Теперь, я должен сортировать структуры по их «времени», используя массив указателей, так что первый указатель в точках массива в структуре с наименьшим временем, второй указатель на второй маленький и т.д. Как я могу это сделать? Я до сих пор не очень хорошо с указателями, так что я не знаю, как подойти к этому вообще. Я пытался смотреть на подобные вопросы уже размещены здесь, но указатели полностью расстроить меня, и я не могу заставить их работать для моего кода. Например, если у меня есть функция: недействительным вид (Hash A, тип клеток * PArray [MAX]) {}, где * PArray [MAX] мой массив указателей и Hash А где структуры сохраняются. Как я пишу остальные функции? Как сделать точку указателя на структуру ??
1

голосов
1

ответ
66

Просмотры

Использование структуры в разных файлах .cpp

Я пытаюсь сделать использовать структуру и функцию, определяющую структуру в разных файлах. Как предложено здесь я делаю следующее: я определяю мою структуру и сохранить его в файл agent.h // Файл agent.h #ifndef AGENT_H #define AGENT_H #include «stdafx.h» #include #include #include // Определение Узлы и агенты STRUCT Agent {INT дом, работа; // Место ИНТ статуса; // S = 0; Е = 1; I = 2; R = 3 * Агент initialize_agents (Int N, Int V); Агент () {состояние = 0; }} А; #endif я определил функцию функцию и сохранил его как agent.cpp // agent.cpp файла #include «stdafx.h» #include #include #include #include «Agent.h» с использованием патезраса; Агент * initialize_agents (Int N, Int В) {Агент * А = новый агент [N]; символ fileN [1024] = "myFile.dat"; FILE * F = Еореп (fileN " работа = J; к ++; } Возвращение (А); }, То у меня есть главный файл main.cpp // agent.cpp файла #include "stdafx.h" #include #include #include "agent.h" с использованием патезраса; INT основных () {Int инет; структура агента; INT V = 100; Int N = 100; Агент * A = initialize_agents (N, V); // Инициализировать агенты возвращают 0; } И я получил следующее сообщение об ошибке: Ошибка: «initialize_agents» не был объявлен в этой области работа = J; к ++; } Возвращение (А); }, То у меня есть главный файл main.cpp // agent.cpp файла #include "stdafx.h" #include #include #include "agent.h" с использованием патезраса; INT основных () {Int инет; структура агента; INT V = 100; Int N = 100; Агент * A = initialize_agents (N, V); // Инициализировать агенты возвращают 0; } И я получил следующее сообщение об ошибке: Ошибка: «initialize_agents» не был объявлен в этой области
emax
1

голосов
1

ответ
17

Просмотры

Распаковка ripemd160 результат питона

Я работаю над программой, которая делает много хеширования, и в одном из шагов, которые я беру результат ripemd160 хэша hashlib и преобразовать его в целое число. Линии: ripe_fruit = новый ( 'ripemd160', sha256 (key.to_der ()) переваривать ().) Key_hash160 = struct.unpack (»
purple_dot
1

голосов
1

ответ
35

Просмотры

Как кодировать / ответ маршала от моего сервера в множественном объекте JSON массиве

Я пытаюсь форматировать мой ответ от сервера в массиве множественного объекта JSON. Я попробовал кусочек и [] Struct, но я считаю, что я не в состоянии правильно понять их использование. Я попробовал метод упоминается здесь - https://play.golang.org/p/9OEPzbf0Me0, но не работает в моем случае я использую golang получить ответ для параметра запроса router.HandleFunc ( "/ v1.0 / синглы », GetInfo) .Methods ( "GET"). Запросы ( "Группа", "{группа}") //controller.go FUNC SendToServer (jsonValue [] байт, командная строка) (models.JSON, ошибка) {вар pdatar models.JSON с: = [] строка { "HTTP: //172.xx.xxx.xx: ххххх /", команда} ответа, ERR: = http.Post (strings.Join (с, ""), «приложение / JSON»,) данных bytes.NewBuffer (jsonValue), ERR: = ioutil.ReadAll (response.Body) ERR = json.Unmarshal (данные,
soamya
1

голосов
2

ответ
332

Просмотры

Разделить большой таНос-блок на более мелкие «разделы»

Есть ли способ использовать poiter арифметику на большом таНос блоке, так что вы можете назначить несколько структур или примитивные типы данных в этой области уже выделены? Я пишу что-то вроде этого, но оно не работает (пытаясь назначить 200 структур в области таНоса 15000byte): символ * primDataPtr = NULL; ЬурейеЕ структуры метаданных МЕТАДАННЫЕ; структура метаданных {. , , } / * Структура метаданных * /. , , primDataPtr = (недействительными *) (таНос (15000)); если (primDataPtr == NULL) {выход (1); } Символ * tempPtr = primDataPtr; ИНТ х; для (х = 0; х
Donkeyboy
1

голосов
2

ответ
442

Просмотры

C - Потеря значения Struct pointee

** Обновлено. К сожалению для тех, чьи ответы больше не имеет смысла. Так я понял, что независимо от того, что я ставлю на линии после Data_pair_node, после того, как он выполняет, то когда дело сбрасывается! WTH? : ИНТ вставки (таблица * т, константный символ * ключ, Const символ * VAL) {INT dest_bucket_index; Таблица * Таблица = т; Hash_bucket * dest_bucket = NULL; Data_pair_node * ток = NULL, * пред = NULL, * NEW_ITEM = NULL; Е ( «хочу быть нулевым сейчас»); И вот: $ 23 = (Hash_bucket *) 0x834010 (GDB) шаг 109 Е ( "будет ноль сейчас"); (GDB) печать table-> ведра $ 24 = (Hash_bucket *) 0x0 Благодаря Aymon Fournier
Aymon Fournier
1

голосов
1

ответ
467

Просмотры

LNK ошибка 2001 с структурой

У меня есть Н- и CPP-файл с некоторыми расчетами, используемых во многих моих проектах. Теперь я пытался поставить их в отдельном DLL, так что файлы не должны быть включен в каждом проекте. При связывании я получаю LNK2001 (неразрешенный символ) ошибки для структуры, однако LIB и DLL находится в нужном месте. Я использую #ifdef TOOLS_EXPORTS #define TOOLS_API __declspec (dllexport) #ELSE #define TOOLS_API __declspec (DllImport) #endif макрос, который отлично работает в течение нескольких методов. Структура определена как та TOOLS_API ЬурейиХ структур {полукокс Name [128]; } UTSystem; И в файлах, используя эту структуру из DLL его также определены правильно Экстерн uTSystem ABC (?); Сообщение об ошибке: ошибка LNK2001: Nichtaufgeloestes externes Символ "структура uTSystem ABC" (ABC @@ 3UuTSystem @@ A?) Есть намеки? Спасибо
Simon
1

голосов
2

ответ
1.8k

Просмотры

Вектор в структуры обыкновение позвольте мне push_back

Привет У меня есть вектор в структуры следующим образом для Pthreads передачи аргументов: STRUCT thread_data {вектор <пара <базы данных, строка>> list_databases; ... ...}; ... еще какой-то код ... то в более поздней функции, когда я сделать следующее (MYDATA это thread_data передается в функцию) (запись является пара <База данных, строка>) mydata-> list_databases.push_back (запись); всякий раз, когда я делаю это он говорит мне, что push_back имеет типа неклассового. Я не понимаю эту ошибку. Я также попытался с помощью: вектор <пару> * list_databases; и mydata-> list_databases-> push_back (вход); и комбинации двух. Все дают мне ту же ошибку. Может ли кто-то предложить? Я исследовал это и застрял на нем в течение нескольких часов. Спасибо редактировать: Вот остальная часть кода: # include # include # include # include # include с использованием патезраса; структура thread_data {вектор <пара> * list_databases; Const символ * магазин; } Недействительными * load_store (недействительными * threadarg); ИНТ основной () {вектор <пара> список; pthread_t thread1; Тест строки; соиЬ тест; Const символ * STORE_NAME = test.c_str (); структура thread_data тестер; tester.store = STORE_NAME; tester.list_databases = & список; pthread_create (& thread1, NULL, load_store, (недействительными *) & тестер); возвращать 0; } Недействительная * load_store (недействительная * threadarg) {структура thread_data * MYDATA; MYDATA = (структура thread_data *) threadarg; Строка store_used = mydata-> магазин; ifstream нагрузки; Преобразование строки; Loader базы данных; load.open (store_used.c_str ()); если (нагрузка) {сегг list_databases-> push_back (new_store); // это где ошибка происходит возврат 0;
aport002

Просмотр дополнительных вопросов