bitte löschen
-
Mach doch mal
sprintf(array_zahl, "%999.1f", zahl);
und die Länge eines char array ist durch den Adressbereich des Prozessors begrenzt.
-
bitte löschen
-
DirkB schrieb:
und die Länge eines char array ist durch den Adressbereich des Prozessors begrenzt.
So kann man das auch sehen. Im Klartext: C überprüft nicht, ob man über die Grenzen eines Arrays hinauskommt. Man muss selbst darauf achten.
adziu24 schrieb:
int char_array_laenge = strlen(array_zahl);
Verwirr dich nicht mit dem Wort "Länge". Ich meinte oben die Länge des Arrays. Die kann man mit
sizeof(array)
herausfinden. Du meintest mitstrlen(array_zahl)
die Länge des Strings, d.h. die Anzahl der benutzten Zeichen (bis zum ersten Nullzeichen).
-
Was hat das jetzt mit dem ersten Post zu tun?
und die Fälle mit dem Code?
-
adziu24 schrieb:
1.Fall
Double Zahl eingeben: 3.33333
Ganzzahl eingeben: 1000000
Kontrollzahl vorher: 1000000
Erfasste double Zahl: 3.333330
Kontrollzahl nachher: 10000002.Fall
Double Zahl eingeben: 3.33333
Ganzzahl eingeben: 1000000
Kontrollzahl vorher: 1000000
Erfasste double Zahl: 3.333330
Kontrollzahl nachher: 1000000kann den unterschied nicht erkennen - alles korrekt
Ok, du hast anscheinen irgendeinen Kindergartencompiler der alles massiv mit Watte ausstopft, damit es ja nie weh tut, wenn man was falsch macht und man auch bloß nicht merkt, dass man einen Fehler hat
-
DirkB schrieb:
Was hat das jetzt mit dem ersten Post zu tun?
und die Fälle mit dem Code?Hab ich schlecht formuliert, ich wollte das auf den Post von adziu24 von 19:46:34 beziehen. Wird editiert.
-
bitte löschen
-
adziu24 schrieb:
was soll mir dann noch passieren
Das sind nur die üblichen gcc-Parameter. Keine Watte in Sicht. Aber ich verspreche dir, dass du einen segfault bekommst, wenn du nur weit genug über das Ende des Arrays hinausschreibst.
-
mngbd schrieb:
Hab ich schlecht formuliert, ich wollte das auf den Post von adziu24 von 19:46:34 beziehen. Wird editiert.
Ich auch. In 1:10 min krieg ich so ein Post mit Spamabfrage nicht beantwortet
Mir ist der Post von SeppJ durch die Lappen gegangen.
Nur ist in adziu24 Code ein char array_zahl[9]; aufgetaucht, das im Beispiel von SeppJ noch nicht da war. Und darum dreht sich ja die ganze Diskussion.
-
bitte löschen
-
DirkB schrieb:
Ich auch. In 1:10 min krieg ich so ein Post mit Spamabfrage nicht beantwortet
-
Toll, dass du dies nicht machen wirst, aber spätestens, wenn jemand anderes dieses Programm verwendet, WIRD dieser 100% einen Segfault verursachen. Das ist so sicher wie das Amen in der Kirche.
Dein Job als Programmierer ist es dieses zu vermeiden.
-
bitte löschen
-
adziu24 schrieb:
begrenzung halt fuer int z.b. 2147483647
segfault bekommt man dann.., wenn man den wertebereich des übergebenen datentyps
überschreitet - warum sagt mir das keiner?Nein, das ergibt einen Überlauf.
int i = 2147483647; i++;
gibt keinen segfault. i ist dann -2147483648. (bei 32-Bit int)
segfault kommt dann, wenn man Speicherbereiche schreiben/lesen will, für die das Programm keine Rechte hat.
-
bitte löschen
-
adziu24 schrieb:
Ein Menge Code
bin noch C neuling... probier nur bissel rum ^^
Ja, mach mal.
-
adziu24 schrieb:
bin noch C neuling...
Dank Deiner ausgeprägten Beratungsresistenz wird sich daran auch nichts ändern.
-
bitte löschen
-
adziu24 schrieb:
sry, aber von was redest du da? das von vorhin war sarkasmus, wie ich erwähnt habe
und was soll an meinem rumspielcode jetzt noch falsch sein?Immer noch dasselbe:
char eine_zahl[1]; ... sprintf(eine_zahl, "%lf", zahl); ... sprintf(eine_zahl, "%d", zahl);
Viel Erfolg weiterhin.
-
Ganz ehrlich! Ich finde deinen Code schrecklich kompliziert und damit nimmst du mir die Lust nachzuprüfen, ob er wirklich richtig arbeitet. An deiner Stelle würde ich den ganzen redundanten Eingabe-Code in eine eigene Funktion packen. Das Argument, dass ein Funktionsaufruf kostet, das zählt bei einer Eingabe definitiv nicht. Auch das du den Wertbereich hart rein gecodet hast, ist nicht wirklich schön. Dafür gibt es Konstanten, damit du bei einem Systemwechsel keine Probleme bekommst. Auch wenn das in deinem Fall wahrscheinlich eher unwichtig ist. Eine Sprache ist aber eine Routine-Angelegenheit und schlechte Angewohnheiten bekommt man nur schwer raus.