Problem mit dem Compieler

masda

Grünschnabel
Hallo leutz
Ich programmiere seit ca. einem Jahr ANSI C in der Schule(Techniker) bin also ein newbie.
bis jetzt hats auch immer gut gefuntzt doch jetzt habe ich ein grande Problem ich hab im meinem source code nur die größe der char text[10] auf char text[40] erweitert und plötzlich mault mein debugger: runtime error :confused: WARUM? hier mein code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

float zahl=0;
int izahl,i,ianz;
char szahl[10];
char text[60];

void main()
{
	printf("Bitte geben sie eine Eurobetrag ein\n");
	scanf("%f",&zahl);

	izahl = (int)zahl;

	itoa (izahl,szahl,10);

	ianz = strlen(szahl);
	printf("anzahl %d\n",ianz);
	
	for (i=0;i<ianz;i++)
	{
	printf("Test %c\n",szahl[i]);
	
		switch(szahl[i])
		{
		case '1':
			strcat(text,"eins-");
			break;

			case '2':
			strcat(text,"zwei-");
			break;

		case '3':
			strcat(text,"drei-");
			break;

		case '4':
			strcat(text,"vier-");
			break;

		case '5':
			strcat(text,"fuenf-");
			break;

		case '6':
			strcat(text,"sechs-");
			break;

		case '7':
			strcat(text,"sieben-");
			break;

		case '8':
			strcat(text,"acht-");
			break;

		case '9':
			strcat(text,"neun-");
			break;
			
		case '0':
			strcat(text,"null-");
			break;                         

		default: printf("Fehler\n");
		}
	}
	
	printf("ergebniss %s\n",text);

}
 
Zuletzt bearbeitet:
Ein solches Problem hatte ich auch schonmal.
Keine Ahnung woran das liegt, ist bei mir aber nur bei globalen Variablen aufgetreten (du benutzt ja auch globale).

Für die anderen wäre es aber sicher gut zu wissen, was für einen Compiler du benutzt, da dass ziemlich sicher nur ein Programmfehler (nicht deiner) ist... (ich hab mir deinen Code zwar nicht durchgelesen, aber das vermute ich mal von deiner Fragestellung)
Falls jemand noch eine alternative Möglichkeit dazu weiß, das würde mich auch interessieren.
(ich hab den Fehler auf VSC++6.0)


Was mir beim Durchlesen noch dazu einfällt:
Bei dir ist ziemlich sicher das Problem, das die Zeichenkette, die du in Text schreiben willst, 40 Zeichen überschreitet und in einen Bereich geschrieben wird, auf den dein Programm keinen (Schreib-)Zugriff hat.
 
Zuletzt bearbeitet:
THX für deine antwort @Beichtpfarrer
ich benutze auch den Microsoft VisualC/C++ 6.0 Compiler (für die anderen :) )
und zu deiner Frage ja ich hab beim ersten ausführen das Feld überschritten aber ich hab es dann auf 80 zeichen erhöht und nochmal ausgeführt und ab dann hat der Comiler und der Debugger rumgesponnen.
Weiß vielleicht noch jemand nen Rat?
 
Hm, hab nochma kurz gelesen...
Du überschreitest wahrscheinlich trotzdem den Speicher, den dein Prozess benutzen darf, denn du hast text nicht mit '\0' terminiert. D.h, strcat sucht unter Umständen vergebens nach einem Ende des Strings und überschreitet den Bereich, den es nutzen darf.

Folgendes könntest du zB dagegen tun:

Bei der Deklaration:
Code:
char text[60] = {0};
Oder irgendwo im Code (falls du text zb mehrmals verwenden willst):
Code:
text[0] = 0;
 
@Beichtpfarrer
habs probiert die variable mit 0 zu deklarieren und auch deinen anderen vorschlag hab ich probiert aber es hat nicht gefuntzt nur soweit dass ich jetzt nur noch nen debug error bekomme und der lautet nach wie vor runtime erorr! in der exe?
Hast du vielleicht noch einen rat?
mfg masda
 
Geh mal mit dem Debugger Zeile für Zeile durch und schau, wo genau dein Fehler auftaucht.
Falls alles nichts hilft lösche ich manchmal die Erstellungsdateien meines Compilers, so dass er gezwungen ist, sie auch wirklich neu zu machen und nicht mehr an irgendnem alten Fehler hängt, der vielleicht schon lange behoben ist. Das beste ist, das wirkt sogar manchmal.
 
@Beichtpfarrer
hat auch nix geholfen habs sogar neu eingetippt in ne Neue Anwendung in einen neuen Quellcode hat auch nix gebracht. :(
 
Ok, stimmt, ich hab's jetzt mal ausprobiert.
Der Fehler liegt wirklich nicht in den von mir genannten Problemen (welche aber auch Fehler verursacht hätten, falls nicht schon vorher einer aufgetreten wäre....).

Für alle, die vielleicht dann eine Lösung wissen - der Fehler liegt in folgendem:
Code:
float zahl;
scanf("%f",&zahl);

Ich persönlich kann mir nicht erklären, warum das einen Runtime-Error verursacht, außer, dass die Implementation von VC++ 6.0 vielleicht fehlerhaft ist, denn ich habe extra in der MSDN nachgeschlagen....
Tut das denn mit dem Borland C++ Builder? Oder ihr da draußen mit Linux, ist das bei euch auch fehlerhaft?


+ : Schreib halt in C++ mit istream, das ist eh comfortabler....
 
Wenn die Variable zahl global ist tritt der Fehler auf.

Macht man sie innerhalb von main so passiert der Fehler nimmer. Vielleicht muss die Variable auf dem Stack liegen weil sonst ein Zeigerzugriff fehlschlägt
 
Zuletzt bearbeitet:
Zurück