Was macht dieses Prog.?
-
Ja.
-
Also wir sind hier im C Forum oder irre
ich mich da???
Was wird dann wohl hier Verkauft???
belegte Brötchen, Autos......?mfg hohesC
-
Um dir mal zu helfen.
Versuche doch mal unter -hohes C- ein Array mit einer Konstanten zu initilaisieren.
-
Um dir mal zu helfen.
Versuche doch mal unter -hohes C- ein Array mit einer Konstanten zu initilaisieren.hahahahahaha! Witz lass nach!
Um dir mal zu helfen#define SIZE 16
char arr[SIZE] ist das gleiche wie char arr[16]!!!
Die 16 die größe des Arrays wird mehrmals im Quellcode verwendet!
Sollt ich einmal die Größe ändern brauch ichs blos in der Präprozessor Anweisung ändern.gruß hohesC
(16 ist auch eine Konstante!!!)
-
#include <stdio.h> #define SIZE 26 int main() { char text[SIZE]="Versuchs du lieber mal!!!\0"; puts(text); return(0); }
-
Warum nicht
char text[SIZE]="Versuchs du lieber mal!!!";
oder noch besser
char text[]="Versuchs du lieber mal!!!";
?
-
Ja das ist in dem fall so aber in dem eigentlichen Prog. taucht die größe des
Arrays mehrmals auf und da ist #define SIZE 16 oder so nützlich!gruß hohesC
-
Heh. Der Code baut einen Buffer Overflow - auf die Art packst du gleich zwei \0 ans Ende des Strings, der dann 27 chars einnimmt. So ists richtig:
#define SIZE 26 /* ... */ char text[SIZE]="Versuchs du lieber mal!!!";
...oder noch besser gleich so:
char text[]="Versuchs du lieber mal!!!";
Aber prinzipiell hast du recht, dass der Präprozessor den Kram auf Textebene ersetzt und es in C gängige Praxis ist, Konstanten durch Präprozessor-Makros lesbarer darzustellen.
-
1. kommt bei
#include <stdio.h> #define SIZE 26 int main() { char text[SIZE]="Versuchs du lieber mal!!!\0"; puts(text); return(0); }
kein Fehler!!!!!!!!!!
2. muss ich die Grösse angeben weil ich zufallsbuchstaben reinschreibe!for(x=0;x<=(SIZE-1);x++) { z=rnd(); if((z>='a'&&z<='z')||(z>='A'&&z<='Z')) { arr[x]=z; } else { x--; } }
Aber wie gesagt wird der quelltext überarbeitet und steht deshalb gerade nicht zur Verfügung!!!!
gruß hohesC
-
Doch Fehler:
$ cat t.c #include <stdio.h> int main(void) { printf("%d\n", sizeof("Versuchs du lieber mal!!!\0")); return 0; } $ gcc t.c && ./a.out 27
Die Zeichenkette ist 27 chars lang, also reichen 26 nicht aus, also ein Buffer Overflow, also ein typischer Heisenbug.
-
Toll Hansi Hinterseer mein Compiler hats akzeptiert!
Nur weil dein Compiler \0 nicht als ein sondern als zwei chars ansieht!
dann tipe für dich 27 ein Mr.Schlaubergerbug
oder setz für \0 ein ' ' leerzeichen!
-
hohesC schrieb:
oder setz für \0 ein ' ' leerzeichen!
ein leerzeichen ist genausowenig 'nicht da' wie \0
belegen beide ein char (zuviel)
-
\0 ist nur ein Zeichen. Du hast aber zwei \0s an deinem String hinten dran.
Und wenn du nicht so ruppig wärst, hätte ich dir jetzt sowohl erklärt, warum das so ist, als auch, warum es nichts bringt, da ein Leerzeichen hin zu schreiben, als auch warum es nicht bedeutet, dass das richtig ist, wenn dein Compiler das so frisst.
-
Ist doch auch wurst ob 1 char zuwenig odernicht....
Sorry das ich so"ruppig" war!
0xdeadbeef = 11011110101011011101111011101111=?sag mir lieber was das für ne zahl ist?
-
hohesC schrieb:
0xdeadbeef = 11011110101011011101111011101111=?
sag mir lieber was das für ne zahl ist?jedenfalls keine primzahl, teilbar durch 11
-
Boah, was ist das denn jetzt wieder fürn bekloppter Thread?
@hohesC: Was willst du jetzt eigentlich? Wenn du deinen Ursprungspost rausnimmst, ist der ganze Thread Quark. Das nimmt ja schon trollige Ausmaße an.
-
Vergesst diesen Thread!!!
Helft lieber dem 373773 oder so!!!
Adiéuich zock jetz WC3 TFT
-
hohesC schrieb:
Vergesst diesen Thread!!!
Helft lieber dem 373773 oder so!!!
Adiéuich zock jetz WC3 TFT
roflmao
Aber die Signatur find ich gut
-
Ich weiss zwar nicht worum es ging - aber bitte nicht die Frage löschen. Auch wenn sie vielleicht peinlich war, oder so.
Denn das Forum lebt ja auch davon, dass viele Fragen schoneinmal beantwortet wurden - wenn jetzt jeder eine Fragen nach der Beantwortung löscht, dann verliert das Forum ja
Und Titel ändern ist auch ganz böse.
Naja, sieh das als Tadel an und merks dir fürs nächste mal, ok?
-
ok