IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: ulozeni string do char[]

Aktivity
Avatar
Mike057
Člen
Avatar
Mike057:23.2.2013 14:28

ahoj. poradite mi nekdo jak udelat toto?

mam stukturu:

struct namelist
        {
          char names[10][8];
          int scores[10];
        };

namelist scoreboard;

no a pak potrebuju udelat tohle:

scoreboard.names[0] = "jmeno";

nevite jak to ma byt spravne? takhle to nefunguje :( dekuji za odpovedi :)

 
Odpovědět
23.2.2013 14:28
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Mike057
David Hartinger:23.2.2013 14:32

string má metodu ToCharArray. K čemu to potřebuješ?

Nahoru Odpovědět
23.2.2013 14:32
New kid back on the block with a R.I.P
Avatar
Mike057
Člen
Avatar
Mike057:23.2.2013 14:33

jo este doplnim ze nepouzivam string protoze potrebuju aby ta struktura mela nemenou velikost.

no je to tabulka score a ja pak celou tu strukturu ukladam do souboru... proto potrebuju aby se nemenila veikost s bytech. kvuli nacitani

Editováno 23.2.2013 14:34
 
Nahoru Odpovědět
23.2.2013 14:33
Avatar
Mike057
Člen
Avatar
Odpovídá na David Hartinger
Mike057:23.2.2013 14:38

a jak ta metoda funguje? me ji to vubec nenabidne :( a kdyz ji tam napisu tak to vyhodi chybu

 
Nahoru Odpovědět
23.2.2013 14:38
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Mike057
Lukáš Hruda:23.2.2013 14:38

C nebo C++ ??

 
Nahoru Odpovědět
23.2.2013 14:38
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Mike057
David Hartinger:23.2.2013 14:39

To vymýšlíš nějakou prasárnu. Zaprvé string jde normálně serializovat do binárního souboru a zadruhé je vhodnější použít např. XML.

Jo až teď jsem si všiml že to není C# :D Si udělej metodu co ti převede string na pole znaků.

Editováno 23.2.2013 14:40
Nahoru Odpovědět
23.2.2013 14:39
New kid back on the block with a R.I.P
Avatar
Mike057
Člen
Avatar
Mike057:23.2.2013 14:46

c++ :D no asi mi nic jinyho nezbyde :/

 
Nahoru Odpovědět
23.2.2013 14:46
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Mike057
Lukáš Hruda:23.2.2013 14:57

Můžeš místo = používat funkci strcpy, ta ti překopíruje řetězec tam kam potřebuješ. Pokud to chceš dělat pohodlněji, tak si pro ten řetězec udělej třídu, která bude používat statický pole o velikosti kterou potřebuješ pro uložení toho řetězce a pak jí stačí přetížit operátor = tak, aby ti ten řetězec překopíroval přesně jak potřebuješ.

 
Nahoru Odpovědět
23.2.2013 14:57
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Mike057
Lukáš Hruda:23.2.2013 15:19
class Name
{
  private:
    static const int size = 8;
    char name[size];

  public:
    Name(){}
    Name(char*);
    const Name & operator=(char*);
    char & operator[](int i){return name[i];}
    operator char*(){return name;}
};

Name::Name(char* str)
{
  int i;
  for(i=0;i<size-1 && i<strlen(str);i++)
    name[i] = str[i];
  name[i] = '\0';
}

const Name & Name::operator=(char* str)
{
  int i;
  for(i=0;i<size-1 && i<strlen(str);i++)
    name[i] = str[i];
  name[i] = '\0';
  return *this;
}

A pak napíšeš:

struct namelist
{
  Name names[10];
  int scores[10];
};

namelist scoreboard;

scoreboard.names[0] = "jmeno";  //tohle ale musí být uvnitř funkce
 
Nahoru Odpovědět
23.2.2013 15:19
Avatar
Mike057
Člen
Avatar
Odpovídá na Lukáš Hruda
Mike057:23.2.2013 16:15

Parada dekuju moc to je presne ono co sem potreboval :)

 
Nahoru Odpovědět
23.2.2013 16:15
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Mike057
Lukáš Hruda:23.2.2013 16:53

Nemáš za co...

 
Nahoru Odpovědět
23.2.2013 16:53
Avatar
Mike057
Člen
Avatar
Mike057:23.2.2013 17:34

tak mam este jeden problem :/ nemuzu to zaboha vypsat

string jmeno = scoreboard.names[0];

textprintf_ex(buffer,font_names_xs,x+8,y+38,makecol(255,153,0),-1,"%s",jmeno);

tohle vyhazuje chybu. zniceho nic promena jmeno nic neobsahuje ale kdyz zmenim %s na %d tak to normal vzpise ale jak cisla :/

 
Nahoru Odpovědět
23.2.2013 17:34
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Mike057
Lukáš Hruda:23.2.2013 17:55

Ta třída nemá definovanou konverzi na string. Ale má definovanou konverzi na char*, takže buďto můžeš dosadit rovnou scoreboard.names[0] do textprintf_ex, nebo změň string na char*. Nehledě na to že textprintf_ex může jako parametr přebírat char*, ale jelikož je to Céčková funkce a v C nexistuje string a zároveň string nemá definovanou konverzi na char*, tak do textprintf_ex vůbec nemůžeš dávat string.

 
Nahoru Odpovědět
23.2.2013 17:55
Avatar
Mike057
Člen
Avatar
Mike057:23.2.2013 18:04

:D aha no kdyz tam dam rovnou scoreboard.names[0] tak to stejne vyhodi chybu... a jestli to neumi string tak co tam mam zdat za to % ?

 
Nahoru Odpovědět
23.2.2013 18:04
Avatar
Mike057
Člen
Avatar
Odpovídá na Lukáš Hruda
Mike057:23.2.2013 18:07

aha uz to mam sem uplne pitomej :D dik moc

 
Nahoru Odpovědět
23.2.2013 18:07
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Mike057
Lukáš Hruda:23.2.2013 18:12

Normálně %s, v C se stringem myslí pole znaků ke kterýmu se přistupuje přes char*, v C++ vlastně taky, string neni základní datovej typ. A co to hází za chybu??

 
Nahoru Odpovědět
23.2.2013 18:12
Avatar
Mike057
Člen
Avatar
Odpovídá na Lukáš Hruda
Mike057:23.2.2013 20:10

no accesvolation ci jak se to pise... a kdyz sem se kouknul na promeny ty struktury tak to psalo ze neplatnej ukazatel... nicmene kdyz se to udela bez toho s a da se to tam rovnou tak to funguje :)

 
Nahoru Odpovědět
23.2.2013 20:10
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na Mike057
Lukáš Hruda:23.2.2013 20:48

I přes to %s to funguje, jenom to musíš explicitně přetypovat, (char*)scorebo­ard.names[0]. Alespoň u printf to funguje, v allegru by mělo taky.

 
Nahoru Odpovědět
23.2.2013 20:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 18 zpráv z 18.