Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » größe eines array zählen

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
15.04.2004, 10:26 Uhr
~GAST
Gast


Folgendes:
Der User darf eine Datei erstellen.


C++:
char dateiname[12];
FILE *datei_neu;


printf("Dateinamen eingeben: "); // eingabe zb.: temp
fscanf("%s", &dateiname);

// jetzt soll an die letzten 3 Stellen des array ein .dat eingefügt werden

datei_neu = fopen(dateiname, "w");

// die Datei sollte jetzt temp.dat heissen
......




Schonmal en Dankeschön im vorraus
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.04.2004, 10:42 Uhr
typecast
aka loddab
(Operator)



C++:
strcat(dateiname, ".dat");



Du solltest Dateiname noch um eine Stelle erweitern, da die terminierende Null auch noch Platz haben sollte. Außerdem solltest du noch den eingelesenen Dateinamen darauf prüfen, dass der User auch keinen Dateinamen mit einer Länge von > 8 eingegeben hat, sonst bekommst du Probleme. Dein Array ist dann nämlich zu klein
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.04.2004, 10:47 Uhr
~mike
Gast


Hi!
Also die Antwort auf deine Überschrift ist imho sizeof(dateiname)/sizeof(char)
Strings kann man mit strncat aneinander hängen

mfg
PS: Mist. Schon wieder zu langsam

Dieser Post wurde am 15.04.2004 um 10:48 Uhr von mike editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.04.2004, 10:51 Uhr
typecast
aka loddab
(Operator)


Lass das mit sizeof, nimm die Funktion strlen().

sizeof(dateiname) müsste dir 4 zurückliefern (je nach Architektur), da dateiname ein char* ist, also ein Pointer auf char.
Und auf 32-Bit Rechnern hat ein Pointer 4 Byte. Es liefert also nicht das zurück, was du erwartest.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)

Dieser Post wurde am 15.04.2004 um 10:53 Uhr von typecast editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.04.2004, 10:58 Uhr
mike
Pinguinhüpfer
(Operator)


Das versteh ich jetzt nicht ganz
Also ich habs gerade probiert und es kommt 12 raus. Rechnet sizeof nicht mit siezof(char)*indizes?
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.04.2004, 11:27 Uhr
typecast
aka loddab
(Operator)


Normalerweise nicht. Bei mir kommt 4 raus.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.04.2004, 12:29 Uhr
ao

(Operator)



Zitat:
typecast postete
Lass das mit sizeof, nimm die Funktion strlen().

sizeof(dateiname) müsste dir 4 zurückliefern (je nach Architektur), da dateiname ein char* ist, also ein Pointer auf char.
Und auf 32-Bit Rechnern hat ein Pointer 4 Byte. Es liefert also nicht das zurück, was du erwartest.

dateiname ist ein Array, kein Pointer (vgl. Deklaration). Überall, wo das sichtbar ist, liefert sizeof (dateiname) 12.
Reichst du das Array als Parameter in eine Funktion hinein, dann geschieht das als Pointer. Innerhalb der Funktion liefert sizeof (FormalerParameter) darum die Größe eines Pointers (je nach Architektur 4 oder was anderes), weil nicht erkennbar ist, dass sich hinter dem Pointer ein 12 Byte langes Array verbirgt.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.04.2004, 12:36 Uhr
~GAST
Gast


wenn ein user 9 zeichen eingibt
sizeof(dateiname) == 9
kann ich dann das neunte feld mit NULL überschreiben (wie?)
und dann strcat(dateiname,".dat") ??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
15.04.2004, 12:50 Uhr
~mike
Gast


Hi!
sizeof(dateiname) == 9 geht imho nicht. Nimm da strlen. Das 9te Zeichen wird mit dateiname[8]='\0' gesetzt - ist imho aber nicht nötig.

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
15.04.2004, 15:13 Uhr
ao

(Operator)



Zitat:
~GAST postete
sizeof(dateiname) == 9

Du bringst was durcheinander.

sizeof wird zur *Compilezeit* berechnet und liefert die *Größe des Objekts* im Speicher, nicht die Länge der darin enthaltenen Zeichenkette. Das ist etwas, was nur zur *Laufzeit* bestimmt werden kann, und zwar mit Hilfe von strlen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


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: