Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problemchen mit char

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 ] > 2 <
010
22.06.2003, 16:26 Uhr
~0xdeadbeef
Gast


@LiLLy: Was du dir da zusammengeschrieben hast, ist eine klassische Quelle für Heisenbugs. Die meisten Betriebssysteme verwalten den Speicher aus Effizienzgründen in sog. 'Pages', d.h. das Programm kriegt einen bestimmten Speicherbereich zugewiesen, in dem es machen kann, was es will. Erst, wenn es den überschreitet, tritt ein Fehler auf.

@Pablo: Wenn du ein char[31] deklarierst, kriegst du auch nur für 31 Zeichen Speicherplatz zugewiesen. Wenn du da nen String reinschreibst, darf der nur 30 zeichen lang sein, weil noch ein 0-Zeichen angehängt wird. Was den SRAM angeht - wenn du 1000 Zeilen von Strings mit 32 Zeichen haben willst, musst du bei jeder Zeile noch ein 0-Zeichen einplanen, also char SRAM[1000][33]. Wenn du allerdings (was ich vermute) ne Bytemap haben willst, brauchst du keine Null-Zeichen, also reicht auch ein char SRAM[1000][32].
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
22.06.2003, 16:37 Uhr
virtual
Sexiest Bit alive
(Operator)


Jau, wenn Du eine Bitmap bauen willst, also auf 32 Zeichen angewisen bist und kein 0-Byte haben willst, kannst Du zB mit printf das erzwingen:

C++:
printf("%32.32s", SRAM[1]);


Schreibt garantiert nur die eine Zeile, ohne daß ein 0 Byte erforderlich wäre-
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
22.06.2003, 17:17 Uhr
Pablo
Supertux
(Operator)


Tja, geanu, ich kann auf das letzte '\0' verzichten, weil ich ein Bitmap will. Aber ich mache mit cout mal Problem, um zu erkenne, ob das Prog. tut, was ich will, und ganz ma Schluss müsen alle Ausgegeben werden und in verschiedenen Zeilen. @vriual, wie geht das eigentlich? Die Formatierung sagt 32.32??? nur die erste 32 Stellen eines Strings? Wieso 32.32 und nicht nur 32?

Danke
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
22.06.2003, 17:32 Uhr
virtual
Sexiest Bit alive
(Operator)


%32.32s bedeutet genau 32 Zeichen, egal ob der String nun länger oder kürzer ist.
%32 Bedeutet mindestens 32, dh ist er länger ist auch die Ausgabe länger
%.32 Bedeutet höchstens 32, dh ist er kürzer, wird auch die Ausgabe kürzer.

Ich denke, Du hast Dein Array so deklarariert, um nachher 1000 Zeilen mit 32 Zeichen zu haben. Aber es könnte ja sein, daß Du auch eine andere Spaltenbreite haben möchtest. Daher würde ich eher so vorgehen:

C++:
/* ungetestet */
#define RAMSIZE 32000

char SRAM[RAMSIZE];

void ausgabe_ram(int breite)
{
    int i;
    for(i=0; i<=RAMSIZE-breite; i+=breite)
        printf("%*.*s\n", breite, breite, SRAM+i);
}


Nur so als Gedankenanstoß, was man mit printf so alles basteln kann...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
22.06.2003, 17:38 Uhr
virtual
Sexiest Bit alive
(Operator)


Ist natürlich noch ein bug drin:

C++:
printf("%*.*s\n", breite-RAMSIZE%breite, breite-RAMSIZE%breite, SRAM+i);


Sollte besser kommen, wenn RAMSIZE%breite != 0
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
22.06.2003, 19:46 Uhr
LiLLy



@~0xdeadbeef Vielen Dank

Hm, n Bitmap erzeugen, klingt interessant;o)
Wie macht man sowas genau?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
22.06.2003, 19:56 Uhr
Pablo
Supertux
(Operator)


Tja @virual, das sieht gut aus, und ich bevorzuge printf, weil ich mit printf ziemlich alles ausgeben kann. Was ich gerade mache, ist einen kleinen Assembler Interpretor, ich bastle mir meinen eigenen, damit ich die Aufgaben der Uni schneller testen kann. Deshalb brauche ich 1000x32. Ich hab schon geschafft, was ich wollte und ich habe schon die Fehler im meinen Source Code gefunden.

Danke an euch allen
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 22.06.2003 um 19:57 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ 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: