Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Merkkijono nollaksi (tyhjäksi)

Sivun loppuun

timok16 [26.09.2007 19:03:09]

#

Moi,

Ongelma, kuinka saan alustettua globaalin merkkijonotaulukon alkion arvot
nollaksi funktion sisällä? Jotenkin on nyt C hukassa????

esim.

unsigned char kissa[513];

void koira (void)
{
 //täällä pitäis voida alustaa merkkijono kissa nollaksi????
}

(Mod. Edit. Kooditagit.)

Sami [26.09.2007 19:17:34]

#

for (int i = 0; i < 513; ++i) {
kissa[i] = '\0';
}

Edit: Tuo tietysti riippuu siitä millä tapaa haluat "nollata" sen taulukon.

Legu [26.09.2007 19:22:19]

#

Turha sitä taulukkoa kokonaan on alustaa nollaksi, jos merkkijonon haluaa "tyhjäksi":

*kissa = '\0';

Ellei sitten timok16:lla ollut jotain erityistä syytä, jota me "koodiNÖRTTELET" emme tajua.

EDIT: onko se ylivoimaista lukea ne keskustelun ohjeet ja käyttää niitä kooditageja

Metabolix [26.09.2007 20:03:33]

#

Merkkijonon päättää nollamerkki ('\0' tai 0), joten merkkijono on "tyhjä", kun ensimmäinen merkki on tällainen.

jono[0] = 0;
printf("Teksti on tyhjä: '%s'\n", jono); // Teksti on tyhjä: ''

Jos koko taulukon haluaa nollata, niin memset-funktio lienee paras vaihtoehto:

#include <stdlib.h> /* Alkuun */

/* Koko taulu: */
memset(taulukko, 0, sizeof(taulukko));
/* Osa taulusta: */
memset(taulukko, 0, maara * sizeof(taulukko[0]));
/* Osoittimen osoittama muisti (vaikkapa dynaaminen taulukko): */
memset(osoitin, 0, maara * sizeof(*osoitin));

timok16 [27.09.2007 08:30:02]

#

Moi,

Kiitti vastauksista, mutta ongelma ei poistunut vielä näilläkään tempuilla.

Siis ongelmana on kun käytän sscanf funktiota toisen kerran pienen viiveen jälkeen. Eli suoritan tuon koira-funktion kerran ja homma pelaa, mutta kun tulen uudestaan koira-funktioon, niin ohjelma kaatuu tuohon sscanf-funktioon??

näin:

unsigned char kissa[513];
unsigned char kissa2[513];

void koira(void)
{
   ....
   memset(kissa, 0, sizeof(513)); //alustetaan tyhjäksi
   memset(kissa2, 0, sizeof(513)); //alustetaan tyhjäksi
   ....
   sscanf((char*)kissa, "%s",kissa2);
}

Blaze [27.09.2007 10:14:46]

#

timok16 kirjoitti:

memset(kissa, 0, sizeof(513)); //alustetaan tyhjäksi

memset(kissa, 0, sizeof(kissa));

DumTom [27.09.2007 16:04:16]

#

Eikös ton kissa ja kissa2:den pitäisi olla char eikä unsigned char?

timok16 [27.09.2007 16:14:03]

#

Moi,

Ongelma löytyi, mutta nyt pitäis saada float to string ilman sprintf funktiota.
Ohjelma kaatuu kun tulen toisen kerran tekemään sprintf funktion, jossa laitetaan float char merkkijonoon.

Nyt mekanismi, millä saan floatin charriksi ilman sprintf-funktiota.

timok

Metabolix [27.09.2007 16:17:18]

#

Miksi se siinä kaatuisi? Taitaa olla vika jossain muualla kuin sprintf-funktiossa. Muita virallisia tapoja ei taida ollakaan, ellet halua math.h:n funktioilla laskeskella ja itse muotoilla.

timok16 [28.09.2007 07:36:48]

#

moi,

Käytän NXP lpc2148 prossaa ja luulempa, että kaatuu tuohon kun stakki tulee täyteen, niin ei saa paluuosoitetta oikein.????

Homma korjaantu, kun muutin funktion kutsun paikkaa ohjelmassani, eli ei kutsua toisen funktion sisältä, missä käytetään sscanf tai sprintf funkkareita.

Takka taas avustanne :)

timok16


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta