Eli käytän sen verran vanhaa dos-kääntäjää joka ei tue stringejä.
Homman nimi on seuraava:On kartta jossa asuinpaikkoja.
Niitä etsitään silmukalla ja merkataan aina x ja y koordinaatti globaaliin struktuuriin muistiin.
Tässä ei ongelmia.
Mutta sitten kun pitäisi valita asuinpaikan perusnimi tulee ongelmia.
Eli jotenkin näin olen tehnyt.
char nimi[15]; if (a==0) strcpy(nimi,"HUT"); if (a==1) strcpy(nimi,"VILLAGE"); if (a==2) strcpy(nimi,"TOWN"); if (a==3) strcpy(nimi,"FORT");
Okei,toihan toimii tähän asti hienosti mutta sitten pitäisi siirtää toi nimi merkkijono globaaliin taulukkoon joka on muotoa:
G.DWELNAME[10][100]
tai sitten
G.DWELNAME[100][10]
en ole varma kumpaa noista pitäisi käyttää,tarkoitus olisi että olisi mahikset sataan asuinpaikkaan ja 10 merkkiä olisi varattu nimelle.
Olen yrittänyt seuraavaa:
strcpy(G.DWELNAME[mones],nimi);
Ei toimi.
Mikä olisi ratkaisu?
Siis pelkkiä C-funktioita käyttäen.
Hanki uudempi kääntäjä.
DumTom kirjoitti:
Eli käytän sen verran vanhaa dos-kääntäjää joka ei tue stringejä.
Umm, djgpp? Jos nyt siis on ihan pakko saada koodata obsoleetille, 30 vuotta vanhalle, käyttikselle.
typedef char NIMI[10]; NIMI DWELNAME[100]; strcpy(DWELNAME[0], nimi);
Eikö toimi? Miten ei toimi? Tuleeko jokin virheilmoitus? Missä vaiheessa?
Kaatuuko jo käännöksessä vai vasta ajon aikana? Jos käännöksessä, niin mitä kääntäjä sanoo? Periaatteessa koodisi näyttäisi olevan oikein, joten luultavasti ongelma on tuon G-struktin kanssa.
Metabolixin esittämä tapa pitäisi toimia. Tosin turvallisempaa olisi käyttää strncpy:ä tähän tapaan:
strncpy(DWELNAME[0], nimi, 9);
Tai mihin tahansa tapaan, mikä määrittää stringin maksimikoon ohi-indeksoinnin estämiseksi. Nythän sinulla "nimi" on 15 merkkiä ja kohde 10 merkkiä (mukaanlukien '\0').
Ei tosiaan ole kaksiulotteiselle char taulukolle muuta tapaa kuin toi Metabolixin kummajainen?
for (short t=0;t<10;t++) { DWELNAME[0][t]=nimi[t] }
Voiskohan toi toimia?
Ja kumminpäin toi taulukko pitää alustaa?
char DWELNAME[100][10]
vai
char DWELNAME[10][100]
char DWELNAME[100][10];
Jos kerta haluat 100 eri nimeä, jotka ovat 10 merkin pituisia.
Kiitoksia kaikille.Naputtelen yöllä ton Metabolixin jutskan.
DumTom kirjoitti:
Ei tosiaan ole kaksiulotteiselle char taulukolle muuta tapaa kuin toi Metabolixin kummajainen?
Tapoja on paljonkin, mutta tuo Metabolixin "kummajainen" on hyvin selkeä. Ensin määritetään typedefillä uusi tyyppi NIMI, joka on 10 merkistä koostuva merkkijono. Sitten varataan DWELNAME-taulukko joka sisältää 100 NIMI-tyyppistä alkiota (eli 10 merkin pituista merkkijonoa). Sitten vain kopioidaan käsiteltävä merkkijono taulukon ensimmäiseen alkioon strcpy:llä. Toki voit tehdä tuon ilman tyyppimäärittelyjäkin varaamaalla merkkijonotaulukon suoraan:
char DWELNAME[100][10];
DumTom kirjoitti:
for (short t=0;t<10;t++) { DWELNAME[0][t]=nimi[t] }Voiskohan toi toimia?
Toki (jos lisäät puolipisteen), mutta jos nimen pituus on 10 tai suurempi, sinulta jää lopetusmerkki uupumaan. Se ei sinällään haittaa jos otat sen muualla ohjelmassa huomioon tai lisäät sen sinne itse:
DWELNAME[n][9] = 0;
Toinen vaihtoehto on alustaa DWELNAME nollaksi ja huolehtia ettei viimeistä merkkiä koskaan kirjoiteta.
Sain homman toimimaan viime yönä.
Kiitosta vaan Torgollekkin...
Aihe on jo aika vanha, joten et voi enää vastata siihen.