JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=be79cb471bdbc017f3a15385a147a87dMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Array Größe ermitteln
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 12:00    Titel: Array Größe ermitteln Antworten mit Zitat

Hallo
Hab mal wieder ein Problem.
CPP:
int main()
{
   char* name;

   name = new char[100];

   int size = sizeof(name)/sizeof(char);

   printf("%d",size);
      
return 0;
}

Ich moechte die Größe von name ermitteln klappt aber irgendwie nicht.
Gibt immer nur den Wert 4 statt 100 zurück. Ich befuerchte das ist die Groese des zeigers und nicht des Arrays. Aber wie geht das nun.

Thx 4 Help
_________________
Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 12:20    Titel: Antworten mit Zitat

Um die Länge eines C-Strings zu bestimmen, gibt es die nette Funktion strlen().

*hier stand Mist*
Wie Christian sagt, 1 nur dazuaddieren, wenn du die Länge des Strings im Speicher brauchst(die ja das 0-Zeichen beinhaltet).
Wenn du nur die Zeichenanzahl brauchst, einfach strlen normal benutzen:
CPP:
int main()
{
   char* name;

   name = new char[100];

   int size = strlen(name);

   printf("%d",size);

   delete[] name;
     
   return 0;
}


PS: Ich glaube du brauchst auch stdio.h Wink

PPS: Für jedes new: delete nicht vergessen Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...


Zuletzt bearbeitet von The Lord of Programming am 16.08.2005, 12:42, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 12:30    Titel: Antworten mit Zitat

Du musst nicht -1 abziehen, wenn schon dann 1 addieren, damit das 0 Zeichen mitkommt.

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 12:39    Titel: Antworten mit Zitat

Embarassed verwechselt... *gleich mal editieren geh*
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dragon
Super JLI'ler


Alter: 38
Anmeldedatum: 24.05.2004
Beiträge: 340
Wohnort: Sachsen
Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 12:40    Titel: Antworten mit Zitat

The Lord of Programming hat Folgendes geschrieben:
PS: Ich glaube du brauchst auch stdio.h Wink

ich kenne es anders Wink
#include <cstring>
_________________
Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 12:49    Titel: Antworten mit Zitat

k Thx schon mal
Die Funktion strlen() ist mir schon bekannt aber das war nur ein zufall das es ein die variable ein char typ war was tun wenn der typ int oder egal was ist.
_________________
Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 12:59    Titel: Antworten mit Zitat

Dann musste es selbst mit merken.
strlen gibt dir auch nicht die Länge von dem charblock wieder, sondern sucht nach dem Nullzeichen.
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 13:06    Titel: Re: Array Größe ermitteln Antworten mit Zitat

CPP:
int main()
{
   int* zahlen;
        int groesse = 100;


   zahlen= new int[groesse];

   int size = groesse * sizeof(int);

   printf("%d",size);
      
return 0;
}


bittschön Smile
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 13:18    Titel: Antworten mit Zitat

Ja danke schoen schon mal fuer die Antworten.
Hotacid ich moechte nicht die groese des ganzen wiesen ich moechte nur
die Groese vom Array ermitteln bei dir im Code (groesse).

Es funktioniert auch wenn ich so schreibe
CPP:
int main()
{
   int name[100];

   int size = sizeof(name)/sizeof(int);

   printf("%d",size);
      
return 0;
}

Aber das bringt mir nichts gibts da nicht eine moeglichkeit ohne die groese in einer eigenen Variable mitzuspeichern.

Thx schon mal
_________________
Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 13:54    Titel: Antworten mit Zitat

das funktioniert leider nicht. du musst dich schon selbst darum kümmern die größe des arrays zu speichern.
Am einfachsten ist da noch die STL Klasse vector zu benutzen:
CPP:
std::vector<int> testVector( 100 );
int size = testVector.length() * sizeof( int );
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 14:24    Titel: Antworten mit Zitat

Mit statischen Array gehts aber.
CPP:
char array[20];
::std::cout << sizeof(array)/sizeof(char) << ::std::endl;


Und wenn du ein Array dynamisch anlegst, kennst du ja die Größe, du legst es ja schließlich an. Im Grunde ist sizeof() da doch eh überflüssig.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 16:50    Titel: Antworten mit Zitat

Theoretisch müsste man sie auch bei dynamischen Arrays herauskriegen können, da new die Größe irgendwo "dahinter" speichern muss, sonst wüsste delete nicht wieviel es löschen soll.
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 17:06    Titel: Antworten mit Zitat

Wie kommst du darauf, das die Größe 'gespeichert' wird?
Ein Zugriff dieser Art ist in C++ völlig 'legal'.
CPP:
int* foo = new int[5];
foo[987] = 123;
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 17:30    Titel: Antworten mit Zitat

GreveN hat Folgendes geschrieben:
Wie kommst du darauf, das die Größe 'gespeichert' wird?
Ein Zugriff dieser Art ist in C++ völlig 'legal'.
CPP:
int* foo = new int[5];
foo[987] = 123;


Was hat das damit zutun?
Bei jedem new aufruf wird zusätzlich die Größe irgendwo gespeichert werden, delete kann nich zaubern. Wink

Guck mal was hier in *a drinsteht:

CPP:
unsigned * a = new unsigned[5];

   a-=4;

_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 16.08.2005, 18:01    Titel: Antworten mit Zitat

OLiver hat Folgendes geschrieben:
GreveN hat Folgendes geschrieben:
Wie kommst du darauf, das die Größe 'gespeichert' wird?
Ein Zugriff dieser Art ist in C++ völlig 'legal'.
CPP:
int* foo = new int[5];
foo[987] = 123;


Was hat das damit zutun?

Das hat damit insofern zutun, dass dieser kurze Codeschnippsel ausreicht, um zuzeigen, dass die Größe nicht gespeichert wird und deshalb Zugriffe außerhalb der Array-Grenzen problemlos möglich sind, andere Sprachen fangen solche netten Dinge ab.

OLiver hat Folgendes geschrieben:
Bei jedem new aufruf wird zusätzlich die Größe irgendwo gespeichert werden, delete kann nich zaubern. Wink

Das nicht, aber 'delete' kann die Array-Signatur lesen, was es dir vorraus hat.



OLiver hat Folgendes geschrieben:
Guck mal was hier in *a drinsteht:

CPP:
unsigned * a = new unsigned[5];

   a-=4;

3082224. Cool
Sieht für mich nach einem Zugriff auf unallokierten Speicher aus.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum