[C++] Verschlüsselungstool, brauche Hilfe bei Fehlersuche :(

aelo

software developer
Thread Starter
Mitglied seit
01.09.2006
Beiträge
3.765
Ort
Österreich / Vlbg
Hi,

ich arbeite gerade an einem kleinen objektorientiertem Verschlüsselungsprogramm.

Hier hätte ich allerdings eine Frage:
um den Text zu verschlüsseln arbeitet mein Programm mit den ASCII Codes und addiert diese mit einem zufällig generierten Schlüssel und einem Passwort.
Nun muss ich allerdings überprüfen ob die somit errechnete Zahl größer bzw. kleiner als der Bereich der char-Variable ist. Nur leider konnte ich nicht herausfinden ob die char-Variable in C++ mit denWerten von 0-255 oder 1-256 arbeitet.
<-- diese Frage hat sich mitlerweile erledigt, 0-255, laut ner ascii-tabelle im Internet


Dann noch eine Frage:
die Verschlüsselung, und Entschlüsselung hab ich nun geschrieben,
nur beim Text einlesen stellt sich mir die frage:
wie kann ich überprüfen wann die einzulesende Datei zu Ende ist?


Danke für eure Hilfe,

mfg
aelo

edit:
hab noch nen paar Probleme, die zwar nicht als Error beim compilen gemeldet werden, aber beim debugge und starten -> wenn ich den Zähler einer Schläfe in Pointer-Form verwendet, also *counter dann gibts errors, aber wenn ich überall einen normalen Integer verwende funktionierts ohne Probleme. <-- kann es sein dass VisualStudio hier buggt?
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
big thx, bin nun wieder zu Hause (war letzte Woche in Prag und konnte deshalb erst heute antworten) und werde dass dann noch die nächsten Tage in mein Programm einbauen

mfg
aelo
 
Zuletzt bearbeitet:
Hi,


ich brauch mal eure Hilfe:

Code:
void applikation::file_einlesen()
{
	cout<<[COLOR="Red"]"Bitte gib den Pfad der Datei an: (wie z.B. C:\dateien\textdatei.txt)"[/COLOR]<<endl;
	char* pfad=[COLOR="RoyalBlue"]new char[/COLOR][100];
	cin.getline(pfad,100,'\n');

	ifstream in;
	in.open(pfad);

	int i=0;

	char* zeichen=new char;
	char* array_ges=new char[1];
	char* array_swap=new char[i+1];

	


	while(!in.eof())
	{
		
		in.getline(zeichen,1);
		
		
		[COLOR="RoyalBlue"]if[/COLOR](i!=0)array_swap=[COLOR="RoyalBlue"]new char[/COLOR][i+1];
		[COLOR="Lime"]//if(i!=0)for(int z=0;z<i;z++)array_swap[z]=array_ges[z];[/COLOR]
		strcpy(array_swap,array_ges);

		[COLOR="RoyalBlue"]delete[/COLOR][]array_ges;
		array_ges=[COLOR="RoyalBlue"]new char[/COLOR][i+1];

		
	[COLOR="Lime"]	//if(i!=0)for(int z=0;z<i;z++)array_ges[z]=array_swap[z];[/COLOR]
		strcpy(array_ges,array_swap);
		array_ges[i+1]=*zeichen;
		[COLOR="RoyalBlue"]delete[/COLOR][]array_swap;

		i++;
	}

	in.close();

	
	code.Settext(array_ges);

}


bekomme da beim verwenden der Funktion einen Error (siehe Anhang)
weiß aber nicht mehr was da nicht passt, bzw. finde den Fehler nicht mehr.

wäre super wenn ihr mir helfen könntet

thx
mfg
aelo
 

Anhänge

  • error.png
    error.png
    8,2 KB · Aufrufe: 29
Zuletzt bearbeitet:
Ich würde Spontan auf den Pointer tippen. Eventuell versuchst du im Speicher einen Bereich zu bearbeiten, der dir garnicht gehört. Debugge mal deine Quellcode und finde raus wann der Fehler auftritt.
 
habe einen Fehler gefunden:
array_ges[i+1]=*zeichen;
das sollte ohne +1 sein

allerdings gibts jetzt eine Endlosschleife

mfg
aelo
edit:
wenn ich ein cout<<*zeichen; hineinschreibe, gibt es immer nur breaks aus obwohl der Inhalt der angegebenen Textdatei hallo wäre
ich vermute jetzt mal dass bim getline noch nen Fehler liegt
kann ich so überhaupt einzelene Zeichen einlesen?
 
Zuletzt bearbeitet:
Code:
void applikation::file_einlesen()
{
	cout<<[COLOR="Red"]"Bitte gib den Pfad der Datei an: (wie z.B. C:\dateien\textdatei.txt)"[/COLOR]<<endl;
	char* pfad=[COLOR="RoyalBlue"]new char[/COLOR][100];
	cin.getline(pfad,100,'\n');

	ifstream in;
	in.open(pfad);

	int i=0;

	char* zeichen=new char;
	char* array_ges=new char[1];
	char* array_swap=new char[i+1];

	


	while(!in.eof())
	{
		
		in.getline(zeichen,1);
		
		
		[COLOR="RoyalBlue"]if[/COLOR](i!=0)array_swap=[COLOR="RoyalBlue"]new char[/COLOR][i+1];
		[COLOR="Lime"]//if(i!=0)for(int z=0;z<i;z++)array_swap[z]=array_ges[z];[/COLOR]
		strcpy(array_swap,array_ges);

		[COLOR="RoyalBlue"]delete[/COLOR][]array_ges;
		array_ges=[COLOR="RoyalBlue"]new char[/COLOR][i+1];

		
	[COLOR="Lime"]	//if(i!=0)for(int z=0;z<i;z++)array_ges[z]=array_swap[z];[/COLOR]
		strcpy(array_ges,array_swap);
		array_ges[i+1]=*zeichen;
		[COLOR="RoyalBlue"]delete[/COLOR][]array_swap;

		i++;
	}

	in.close();

	
	code.Settext(array_ges);

}

So ganz verstehe ich dein Quelltext nicht. Du hast aber einen Fehler drin. Deine Pointer verweisen ja auf Speicherbereiche. Wenn du den Pointer einfach umlegst ohne den Speicher wieder frei zu geben, dann bleibt der Speicher erstmal belegt bis zum nächsten Neustart des PC. Du solltest also sauber arbeiten. Überall wo new char[X] steht wird Speicher resaviert und den musst du wieder frei geben.

Nun zu deinem Problem. Da muss schon i+1 stehen. Das ist schon richtig so. Du würdest ja sonst dein Zeichen nicht hinten anfügen sondern überschreiben. Änder doch mal bitte den Code. Ich hab das Gefühl ich konnte deinen Änderungen nicht folgen und wir reden gerade aneinander vorbei :)
 
Zuletzt bearbeitet:
bin e grad in der Schule, werde heute meinen Lehrer noch mal fragen
hab nämlich schon mal nen ähnliches BSP gecoded, ist allerdings schon länger her

momentan vermute ich allerdings dass der fehler bemi
in.getline(zeichen,1); liegt
kann ich so überhaupt ein einzelnes zeichen einlesen?

thx
mfg
aelo
 
shice
hab nen bigges problem
programm funktioniert soweit

allerdings hat das ganze einen Denkfehler :(
wenn die Summe der ASCII-Codes höher ist als 256 dann werden 256 abgezogen
nur leider kommt es dan auch oft vor dass die Summe ASCII-NULL ist und somit wenn dass in einem array gespeichert wird, meint das prog nachher das es das Ende ist :(
wie kann ich das umgehen?

mfg
aelo
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh