www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

CCS problem s stringi

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.41

PrispevekObjavljeno: Sob Mar 08, 2008 11:07 pm    Naslov sporočila:  CCS problem s stringi Odgovori s citatom

Tole je direkt iz help-a:
Koda:
The compiler allows a non-standard C feature to implement a constant array of variable length strings.

The syntax is:

const char id[n] [*] = { "string", "string" ...};

 

Where n is optional and id is the table identifier.

For example:

const char colors[] [*] = {"Red", "Green", "Blue"};


Prevajalnik tega ne prebavi, javi en kup napak #27 (Expression must evaluate to a constant) in #43 (Expecting a declaration).

*colors[] tudi ne deluje, čeprav ne javi napake v tem primeru.

colors[3][6] deluje, ampak to ni to...

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.66
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Ned Mar 09, 2008 3:29 am    Naslov sporočila:   Odgovori s citatom

char ** ne deluje? To je čisto standardna zadeva ...

LP!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.41

PrispevekObjavljeno: Ned Mar 09, 2008 10:18 am    Naslov sporočila:   Odgovori s citatom

** ne deluje.
Prevajalnik javi tole:
Koda:
--- Info 300 "test.c" Line 0(0,0): More info:   First Declaration of ??0
*** Error 31 "test.c" Line 42(13,14): Identifier is already used in this scope
*** Error 43 "test.c" Line 42(23,24): Expecting a declaration

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.66
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Ned Mar 09, 2008 11:46 am    Naslov sporočila:   Odgovori s citatom

A lahko pripneš svojo kodo, tam kjer deklariraš in tam kjer uporabiš to spremenljivko?

LP!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.41

PrispevekObjavljeno: Ned Mar 09, 2008 12:30 pm    Naslov sporočila:   Odgovori s citatom

Koda:
#device PIC16F628A

const char colors[] [*] = {"Red", "Green", "Blue"};
const char **test = {"ena", "tristoosem", "666"};
void main()
{
}


Prevajalnik javi tole:
Koda:
*** Error 27 "test.c" Line 3(23,24): Expression must evaluate to a constant
*** Error 43 "test.c" Line 3(25,26): Expecting a declaration
*** Error 43 "test.c" Line 3(27,28): Expecting a declaration
*** Error 43 "test.c" Line 3(33,34): Expecting a declaration
*** Error 43 "test.c" Line 3(33,34): Expecting a declaration
*** Error 43 "test.c" Line 3(42,43): Expecting a declaration
*** Error 43 "test.c" Line 3(42,43): Expecting a declaration
*** Error 43 "test.c" Line 3(50,51): Expecting a declaration
*** Error 43 "test.c" Line 3(50,51): Expecting a declaration
*** Error 43 "test.c" Line 3(51,52): Expecting a declaration
--- Info 300 "test.c" Line 0(0,0): More info:   First Declaration of ??0
*** Error 31 "test.c" Line 4(13,14): Identifier is already used in this scope
*** Error 43 "test.c" Line 4(19,20): Expecting a declaration
*** Error 43 "test.c" Line 4(21,22): Expecting a declaration
*** Error 43 "test.c" Line 4(27,28): Expecting a declaration
*** Error 43 "test.c" Line 4(27,28): Expecting a declaration
*** Error 43 "test.c" Line 4(41,42): Expecting a declaration
*** Error 43 "test.c" Line 4(41,42): Expecting a declaration
*** Error 43 "test.c" Line 4(48,49): Expecting a declaration
*** Error 43 "test.c" Line 4(48,49): Expecting a declaration
*** Error 43 "test.c" Line 4(49,50): Expecting a declaration
      20 Errors,  0 Warnings.


Enako je, če dam deklaracije znotraj main().

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.66
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Ned Mar 09, 2008 12:43 pm    Naslov sporočila:   Odgovori s citatom

Pri deklaraciji bi moralo tole delovati:

const char *test[] = {"ena", "tristoosem", "666"};

**neki je pa pointer na takšen array pointer-jev.

LP!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.41

PrispevekObjavljeno: Ned Mar 09, 2008 1:20 pm    Naslov sporočila:   Odgovori s citatom

Moralo bi, ja... pojma nimam, kaj je tule narobe.
Osnove C (kazalci, polja, reference, ...) so mi jasne, zato mi je vse skup še bolj čudno

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.66
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Ned Mar 09, 2008 1:42 pm    Naslov sporočila:   Odgovori s citatom

Na hitro sem preizkusil takšen program (v treh različnih prevajalnikih):

Koda:

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
  const char *str[] = {"ena", "tristoosem", "666"};
  const char **str_ptr;
  int i;

  str_ptr = str;

  // spodnje oboje deluje:
  for(i=0; i<3; i++) printf("%s\n", str[i]);
  for(i=0; i<3; i++) printf("%s\n", *str_ptr++);

  getch();

  exit(EXIT_SUCCESS);
}


Deluje b.p. Se pravi v kodi ni problem, mogoče pa ima tvoj prevajalnik kakšne svoje 'težave'.

V vsakem primeru bi to moralo delovati, razen če kje spreminjaš te nize (zaradi const). Potem ti bo verjetno procesor zablokiral ...

LP!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.41

PrispevekObjavljeno: Ned Mar 09, 2008 1:44 pm    Naslov sporočila:   Odgovori s citatom

Koda:
#include <16F628A.h>

const char *test[] = {"ena", "tristoosem", "666"};

void main ()
{
   char s[16]="test";
   char x[]="blabla";
   int i;
   for(i=0;i<3;i++)
   {
      sprintf(s,"%s",test[i]);   
      sprintf(s,"%s",x);   
   }
}


Tole prevajalnik prebavi, vendar prvi sprintf() ne naredi nič.
Če pri deklaraciji odstranim "const" dobim napako:

*** Error 74 "test.c" Line 17(0,1): Not enough RAM for all variables

**test javi napako, kot sem že napisal.

Tole pa deluje pravilno, z in brez "const":

Koda:
#include <16F628A.h>

const char test[3][16] = {"ena", "tristoosem", "666"};

void main ()
{
   char s[16]="test";
   char x[]="blabla";
   int i;
   for(i=0;i<3;i++)
   {
      sprintf(s,"%s",test[i]);   
      sprintf(s,"%s",x);   
   }
}


Kot pika na i se MPLAB sesuje, ko je v primeru *test[] delkaracije ta vključena v watch okno. Confused

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.66
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Ned Mar 09, 2008 2:04 pm    Naslov sporočila:   Odgovori s citatom

Sem poizkusil tvoj zadnji primer, pa pri meni deluje normalno. Zdaj ali ima tvoj prevajalnik probleme, ali je pa stvar v arhitekturi (const string je verjetno v code sekciji, kar je mogoče 'predaleč' za pointer ...).

Treba bi bilo pogledati kodo v assemblerju, da bi se videlo, kaj se dogaja. Tukaj ti pa ne morem pomagati, ker ne poznam assemblerja oz. ukazov za pic-e ...

LP!

p.s.: podobna stvar (const char ....) deluje normalno na 8051 ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.41

PrispevekObjavljeno: Ned Mar 09, 2008 7:33 pm    Naslov sporočila:   Odgovori s citatom

Očitno ima prevajalnik prebavne motnje
_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.62
Kraj: Trzic

PrispevekObjavljeno: Ned Mar 09, 2008 8:58 pm    Naslov sporočila:   Odgovori s citatom

Nič novega za CCS... Porihtajo eno stvar in druga banalna stvar ne dela več...
_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group