Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

13.04.2008, 20:45

größe von Buchstaben.

Wenn ich die funktion "size of" benutze, besipielsweise auf eine textdatei, giebt er mir so zu sagebn den Wert heraus, wie viele buchstaben und leertasten etc in der Textdatei sind oder?

Also, ein byte (giebt ja glaube ich bytes aus), ist gleich ein buchstabe, zahl oder zeichen oder?

2

13.04.2008, 20:50

Nein.
Die exakte Dateigrösse musst du mit seek & tell rausfinden.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

13.04.2008, 21:47

Re: größe von Buchstaben.

Zitat von »"Dustin Braun"«

Wenn ich die funktion "size of" benutze, besipielsweise auf eine textdatei, giebt er mir so zu sagebn den Wert heraus, wie viele buchstaben und leertasten etc in der Textdatei sind oder?

Also, ein byte (giebt ja glaube ich bytes aus), ist gleich ein buchstabe, zahl oder zeichen oder?


Der Operator sizeof gibt die Größe eines Datentyps zurück. Mit Dateien funktioniert das Ganze nicht. Du kannst die Größe einer Datei aber z.B. über Standard C/C++ Mittel herausfinden (fopen, fseek, ftell, oder ifstream) oder über die WinAPI Funktion GetFileSize: http://msdn2.microsoft.com/en-us/library/aa364955(VS.85).aspx.
@D13_Dreinig

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

4

13.04.2008, 21:56

Wird sizeof nich sogar direkt vom compiler in eine zahl umgewandelt

5

13.04.2008, 22:01

Ich möcte eine Textdatei lesen, und was drin steht in einen char[] packen. Ich möchte aber halt nicht die anzahl der Arrays gleich auf 60000 setzen oder so, sondern nur auf die anzahl der buchstaben, zahlen und zeichen die in der textdatei drin sind. sizeof sagt mir also wie viele buchstaben in der datei sind oder?

Databyte

Alter Hase

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

6

13.04.2008, 22:12

so ?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ifstream in;


// Lade Datei

in.open("test.txt", ios::binary);

if (!in)
{
    cout << "Fehler beim oeffnen der Datei!";
    cin.get();
    return 0;
}

// Länge herrausfinden

in.seekg (0, ios::end);
int length = in.tellg();
in.seekg (0, ios::beg);

// Datei einlesen

char* buffer = new char[length];

in.read(buffer,length);
in.close();

7

13.04.2008, 22:38

Zitat von »"Dustin Braun"«

... sizeof sagt mir also wie viele buchstaben in der datei sind oder?


sizeof liefert die Anzahl von Bytes, die für eine Variable oder einen Datentyp reserviert werden, siehe Beispiel:


C-/C++-Quelltext

1
2
3
4
5
6
        /* Wie gross ist int? Meist erhaelt man 4. */
    
    main()
    {
       printf("%d \n", sizeof(int));
        }


sizeof kann auch auf strukturierte Datentypen, z.B. eine Struktur

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
        /* Will print 8 on most machines. */
    
        main()
    {
      struct 
      {
        int a;
        int b;
     }TwoInts;
    
    printf("%d \n", sizeof(TwoInts));
    }


oder ein Array angewandt werden.

C-/C++-Quelltext

1
2
3
4
5
6
    main()
    {
      char String[20];
      
      printf ("%d \n", sizeof (String));
        }


QUELLE

8

14.04.2008, 20:27

Nun, sizeof ist zum einen ein Operator, und zum anderen kann er aber nicht überladen werden (welche Operatoren noch nicht überladen werden können: http://www.devx.com/tips/Tip/12681).

Bei sizeof bei komplexen Typen wie Klassen und Strukturen ist darauf zu achten, dass der Compiler keine Füllbits einfügt. Sonst könnte man sich schonmal über die Größe die sizeof zurückgibt wundern.

sizeof auf eine Array anzuwenden, geht schon, allerdings nur auf welche, die auf dem Stack liegen. Auf dem Heap würde die Größe des Elementzeigers zurückgegeben werden.

C-/C++-Quelltext

1
2
int* ptr_array_heap(new int[10]);
std::cout << sizeof (ptr_array_heap) << "\nint* ^= " << sizeof(int*) << std::endl;


Dadurch das sizeof bei Arrays auf dem Stack deren vollständige Größe zurück gibt:

C-/C++-Quelltext

1
2
char sample[10];
std::cout << sizeof(sample) << " == sizeof(char) * size = " << sizeof(char) * 10 << std::endl;

Kann man durch einen einfachen Trick die Anzahl der Elemente des Stack-Arrays herausbekommen.

C-/C++-Quelltext

1
#define array_size(x) sizeof(x) / sizeof(x[0])

D.h. die gesamte Größe durch die Größe eines Elementes.

Die Dateigröße ist wieder etwas ganz anderes:

C-/C++-Quelltext

1
2
3
4
5
const std::streamsize file_size(const char* file_name)
{
    std::ifstream file_stream(file_name, std::ios_base::binary | std::ios_base::app);
    return static_cast<std::streamsize>(file_stream.tellg());
}
sollte schon reichen.
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Werbeanzeige