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.)
for (int i = 0; i < 513; ++i) { kissa[i] = '\0'; }
Edit: Tuo tietysti riippuu siitä millä tapaa haluat "nollata" sen taulukon.
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
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));
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); }
timok16 kirjoitti:
memset(kissa, 0, sizeof(513)); //alustetaan tyhjäksi
memset(kissa, 0, sizeof(kissa));
Eikös ton kissa ja kissa2:den pitäisi olla char eikä unsigned char?
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
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.
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.