Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » in einer funktion die länge eines übergebenen arrays ermitteln

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.02.2004, 14:55 Uhr
~derduke
Gast


Hi, ich bin noch recht neu in C und stoße mit meiner verrauchten rübe gerade vor ein problem, das ich mir nicht selbst erklären kann, und darum um euren kurzen Zeitaufwand bitte, mir jenes zu erläutern :

Ich möchte eine Funktion schreiben, bzw. hab sie geschrieben, um einen Text animiert auszugeben, aber ich schaffe es nicht, die größe des arrays text[] innerhalb der funktion mit sizeof() zu ermitteln; das heißt, also nachdem es übergeben wurde:




C++:
void machinetext(char * array, int x, int y, int dly){
    int i=0;
    while(i<sizeof(array)){ //hier gibt sizeof() den wert 4 zurück,
                            //sollte aber 10 sein. mit *array ist der
                            //Wert 1...
        gotoxy(x,y);                
        printf("%c",array[i]);      
        if (array[i]!=' ') _beep(1000,1);
        _sleep(dly);
       i++;
       x++;
      }
}



C++:
void main(){
   char text[10]={'T','E','S','T','S','T','R','I','N','G'}
   machinetext(text,15,15,50);
   getchar();
}



wie ermittle ich nun innerhalb der funktion machinetext die länge des arrays text[]??

Many Thanx schonmal im Voraus
dUkE

Dieser Post wurde am 09.02.2004 um 15:13 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.02.2004, 15:13 Uhr
Pablo
Supertux
(Operator)


1. sizeof liefert die Anzahl von bytes, die eine Variable braucht, um gespeichert zu werden.

2. Wenn du die Länge einer Zeichenkette (char*) ermitteln willst, dann benutze die Funktion strlen


C++:
int x = strlen("Hallo"); // x==5



3. Innerhalb einer Funktion kann man nicht die gesamte Anzahl von Elementen eines Arrays (das als Parametr übergeben wird) bestimmen.


C++:
void foo(int* x) {
    int y=sizeof(x);
}


y==4 ==> sizeof liefert die Anzahl der Bytes, die x als Variable benötigt um da zu sein. Im diesem Fall 4, da x ein Pointer ist. Deshalb ist es üblich, Funktionen zu sehen, die die Länge des Arrays als Parameter bekommen.

C++:
void foo(int* x, size_t len) {
    int y=len;
}


y== Anzahl der Elementen. Beachte, dass size_t ungefähr das gleiche ist wie int. Der Unterschied liegt darin, dass size_t keine negative Zahlen akzeptiert.

4. Die Main Funktion ist int nicht void!!
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 09.02.2004 um 15:17 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.02.2004, 15:22 Uhr
~derduke
Gast


ok das leuchtet ein, vielen dank...

warum ist main nicht void? main gibt doch nichts zurück...

ui ui ist halt doch immer aller anfang schwer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.02.2004, 15:36 Uhr
~derduke
Gast


und mir ist noch was aufgefallen:
in meiner obenstehenden funktion machinetext() würde folgendes:

C++:
while(i<strlen(array));


das selbe bewirken wie:

C++:
while(array[i]!="\0");


und soweit war ich am anfang auch schon, hab mich dann nur so aufgeregt, das ich das was ich wollte nicht hinbekam, mit dem sizeof()...

fazit: habe frage, kriege antwort, wisse jetzt von der existenz der funktion
strlen() und von size_t

danke schön, peace
duke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.02.2004, 15:48 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

warum ist main nicht void? main gibt doch nichts zurück...


Die kurze Antwort ist, weil es der standard(ups ich weiss gar nicht ob ich noch dieses Wort schreiben darf oder ob beefy sich das mitlerweile hat patentieren lassen) so vorsieht...
Schau mal hier da hat der virtual was zu geschrieben


das beides (mit strlen oder mit '\0') aufs selber hinausläuft liegt wohl daran das strlen auch so implementiert ist das es die zeichen bis zum nullbyte zählt...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 09.02.2004 um 15:49 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
09.02.2004, 17:30 Uhr
Pablo
Supertux
(Operator)


ich würde an deiner Stelle vorher den Wert von strlen() speichern, weil sonst wird die Länge jedesmal neu berechnet und die Bedingung läuft dann in O(n) und nicht in O(1).
So:

C++:
j=strlen(array);
while(i<j);


------------------------------------------------------------------------------------------------------------------------------------
So funktioniert es auf jeden Fall gar nicht, denn array[ i ] liefert ein char und "\0" eine Zeichenkette ist bestehend aus { '\\', '0', '\0'}

C++:
while(array[ i ]!="\0");



Was du meinst ist:

C++:
while(array[ i ]!='\0');



Zu der Fkt. main: lies mal, was virtual gepostet hat.

oder

C++:
while(array[ i ]);


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 09.02.2004 um 17:32 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
09.02.2004, 17:40 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


naja extra ne variable zum speichern der länge vorhalten ist auch nicht so der renner...
dann lieber so

C++:
void machinetext(char * array, int x, int y, int dly){
    for(char* p=array;*p;++p,++x){
        gotoxy(x,y);                
        printf("%c",*p);      
        if (*p!=' ') _beep(1000,1);
        _sleep(dly);
     }
}


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 09.02.2004 um 17:42 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: