c++ , struct, разбитие строки

132
22 августа 2021, 21:00

здраствуйте форумчане, суть моего вопроса состоит в том что надо разбить строку сисволом '=' из переменой env и записать в структуру block

struct block 
{
    char *name;
    char *value;
};
int main(int, char**, char** env) 
Answer 1

Можно изобразить что-то в таком духе:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct block 
{
  char *name;
  char *value;
};
int
main (int ac, char *av[], char **env)
{
  int n = 0;
  while (env[n])
    n++;
  struct block p[n];
  for (int i = 0; i < n; i++) {
    p[i].name = strdup(env[i]);
    p[i].value = strchr(p[i].name, '=') + 1;
    p[i].value[-1] = 0;
  }
  for (int i = 0; i < n; i++)
    printf("%s : '%s'\n", p[i].name, p[i].value);
  return puts("End") == EOF;
}

Если опасаетесь некорректно сформированного env[], добавьте проверку самостоятельно.

Если что-то непонятно, читайте manpages, а потом не стесняйтесь, спрашивайте.

Answer 2

Я бы сделал примерно так:

#include <cstring>
#include <iostream>
#include <string>
#include <string_view>
#include <vector>
struct block
{
    std::string name, value;
};
int main(int, char **, char **env) 
{
    std::vector<block> blocks;
    for (char **ptr = env; *ptr; ptr++)
    {
        std::string_view string = *ptr;
        std::size_t separator = string.find_first_of('=');
        blocks.push_back({std::string(string.substr(0, separator)),
                          std::string(string.substr(separator+1))});
    }
    for (const block &b : blocks)
        std::cout << b.name << " = " << b.value << '\n';
}
READ ALSO
Есть ли ошибки или проблемы в коде

Есть ли ошибки или проблемы в коде

Я начал изучать C++ ООПИ придумал вот такой пример с фабриками по добыче угля и железа

189
QTreeView с QCheckBox

QTreeView с QCheckBox

Не понимаю как реализовать QTreeView с checkboxКак обработать событие установки и снятия "галочки"

170
Как получить сообщение всем потокам?

Как получить сообщение всем потокам?

Например я получаю из очереди сообщение и хочу его разослать всем потокамЯ думал про общую память, но вроде вдруг не все потоки успеют использовать...

140
аналог unix socket в windows

аналог unix socket в windows

Есть ли аналог unix socket в windows? Типа такого как в линукс и unix

126