 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Sob Mar 08, 2008 11:07 pm Naslov sporočila: CCS problem s stringi |
|
|
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 |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Ned Mar 09, 2008 3:29 am Naslov sporočila: |
|
|
char ** ne deluje? To je čisto standardna zadeva ...
LP! |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Ned Mar 09, 2008 10:18 am Naslov sporočila: |
|
|
** 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 |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Ned Mar 09, 2008 11:46 am Naslov sporočila: |
|
|
A lahko pripneš svojo kodo, tam kjer deklariraš in tam kjer uporabiš to spremenljivko?
LP! |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Ned Mar 09, 2008 12:30 pm Naslov sporočila: |
|
|
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 |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Ned Mar 09, 2008 12:43 pm Naslov sporočila: |
|
|
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 |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Ned Mar 09, 2008 1:20 pm Naslov sporočila: |
|
|
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 |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Ned Mar 09, 2008 1:42 pm Naslov sporočila: |
|
|
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 |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Ned Mar 09, 2008 1:44 pm Naslov sporočila: |
|
|
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.  _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Ned Mar 09, 2008 2:04 pm Naslov sporočila: |
|
|
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 |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Ned Mar 09, 2008 7:33 pm Naslov sporočila: |
|
|
Očitno ima prevajalnik prebavne motnje _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Ned Mar 09, 2008 8:58 pm Naslov sporočila: |
|
|
Nič novega za CCS... Porihtajo eno stvar in druga banalna stvar ne dela več... _________________ Lp,
Matevž |
|
Nazaj na vrh |
|
 |
|
|
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
|