Onko c siten että jos tarkoitetaan tyhjää se on aina 'null' ja jos on merkkijono (mikä tahansa) niin se on " ". vai voiko sen sijaan käyttää jotakin muuta merkintää?
Merkkijonoa kuvaava...
dfafd
4249
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 4
Vanhimmat
En ole nyt aivan varma mitä tarkoitat mut koitetaan.. olkoot aikka kaks muuttujaa:
char *a = "";
char *b = NULL;
Muuttuja a osoittaa muistipaikkaa, jossa on pelkkä nollamerkki. Merkkijonon pituus on nolla, mutta merkkijono on kuitenkin olemassa.
Muuttujan b arvo on nolla, sitä siis "ei ole määritelty", se ei osoita mitään paikkaa muistissa jossa merkkijono voisi olla.
'char *a = "";
Muuttuja a osoittaa muistipaikkaa, jossa on pelkkä nollamerkki. Merkkijonon pituus on nolla, mutta merkkijono on kuitenkin olemassa. '
On olemassa niin kauan kun jokin muu kirjoittaa kyseiseen muistipaikkaan. Kyseessähän on alustamaton pointteri, jonka osoittaman datan pysyvyys on pelkästä tuurista kiinni.
NULL on siis määritelty vakio joka on aina nolla.
char *b=0 tarkoittaa samaa kuin edelläkin oli mainittu.
Niin itseasiassa:
char* a = "";
On sama kuin
char a[1] = { '\0' };
Eli toi a osoittaa staattiseen varattuun muistiin. Merkkojonon pituus siis on nolla mutta itse taulukon koko on 1.
C :ssa toi pitäisi muutenkin kirjoittaa
char const* a = ""; kun siinä nuo on automaattisesti char const* -tyyppisiä.
ja sitten :
int main()
{
int c=0;
c++;
c++;
c++;
printf("%d\n",c);
return 0;
}