Pointer wider willen + struct
-
Hallo ihr lieben c freunde ich hätte dann mal wieder ein Problem bei den ich nicht weiterkomme und wo ich auf eure Hilfe hoffe.
Zuerst mal eine grobe Erklärung:
In einer makefile befindet sich ein selbstdeffinierter Datentyp.
In der main methode wird nun ein pointer auf diesen selbstdeffinierten datentyp gerichtet, anschließend wird der pointer an eine funktion übergeben welche eigentlich nur zwei werte aus einer txt datei liest und diese dann in den selbstdeffinierten datentyp hinterlegt, wobei wie gesagt der pointer übergeben wurde.So jetzt das ganze etwas anschaulich mit quellcode
die Headerdatei in der, der selbstdeffinierte datentyp steht, interessant für mein problemn ist eigentlich nur publickey
//Datentypen //------------------------------------------------ struct key { long int s; //Teil des oeffentlichen schluessels long int t; //Teil des privaten schluessels long int k; //RSA Modul }; typedef struct key key; //------------------------------------------------ struct privatkey { long int t; //Geiheimexponent long int k; //RSA Modul }; typedef struct privatkey privatkey; //------------------------------------------------ struct publickey { long int s; //Oeffentlicher exponent long int k; //RSA Modul }; typedef struct publickey publickey; //------------------------------------------------
Nun zu der eigentlichen funktion (lediglich ein auszug) die mir ärger bereitet
int codedsubmenueone (publickey *publickey) { //Variablendeffinition/ -belegung int i = 0; int flag = 0; char eingabe; char chv[255]; char pfad[255]; char c; FILE *in; //Zeiger auf eine Datei do { flag = 0; //Entscheidungsvariable wird vordeffiniert //Konsole leeren clearconsole(); //Public Key ermitteln printf("Bitte treffen sie ihre Wahl:\n\n"); printf("1) Schluessel befindet sich in einer Datei\n"); printf("2) Schluessel per Hand eingeben\n"); printf("3) Zurueck zum Hauptmenue\n\n\n"); printf("> "); // Eingabe abfangen scanf("%c",&eingabe); while (getchar() != '\n'); // weitere Navigation , weiterleitung je nach auswahl des Nutzers switch (eingabe) { //===================================================================================================== case '1' : //Schluessel ist in Datei do { flag = 0; //Entscheidungsvariable wird vordeffiniert //Konsole leeren clearconsole(); //Pfad eingabe, wo ist der public key printf("Bitte geben sie den Pfad der Datei, in welcher sich der public key befindet, an!\n\n"); printf("> "); //Eingabe abfangen scanf("%254[^\n]", &pfad); while (getchar() != '\n'); //teste ob pfad existent in = fopen(pfad,"r"); if (in == NULL){ //ungueltige eingabe, pfad nicht existent printf("Ungueltiger Pfad eingegeben: <%s>\n", pfad); getchar(); flag=1; } else { //PublicKey Datei ist vorhanden der Public key kann ausgelesen werden //Test printf("Gueltiger pfad"); getchar(); flag = 0; //Entscheidungsvariable wird vordeffiniert i = 0; //Zaehlvariable wird vordeffiniert //Schleife zum auslesen des Public Keys //============================================================================================== //Und ab hier haut irgend etwas glaub ich nicht hin while((c = fgetc(in)) != EOF) { //grenze zwischen s und k finden if (c==';') { //Variablendeffinition flag = 1; i = 0; //s in publickey abspeichern publickey->s=(long int)chv; } else { //Grenzpunkt noch nicht gefunden if (flag==0) { //Auslesen von s chv[i] = c; //Zwischenspeichern } else { //Auslesen von k chv[i] = c; //Zwischenspeichern } //Zaehelvariable erhoen i++; } } //k in publickey abspeichern publickey->k=(long int)chv; //Datei wieder schliessen fclose(in); //Testen wir das ganze printf("%li, %li",publickey->s, publickey->k); getchar(); //==================================================================================================== //Hier geht es dann weiter aber das ist erst mal unrelevant
Zu meinen problem ich mache am ende ja einen kleinen test
printf("%li, %li",publickey->s, publickey->k);
Der mir die werte anzeigen soll, nun kriege ich aber erstens imm zwei identische werte ausgegeben und zweitens steht dieser wert nicht mal ansatzweise in der Datei.
Ich hoffe ich konnte mich einigermaßen verständlich machen wo mein problem ist bzw. wo meine schwierigkeit liegt und hoffe mir kann jemand helfen.
Auf jeden fall vielen dank an alle die bis hierher durchgehalten haben.
Anmerkung: In der Datei befinden sich zwei zahlen werte welche im long int bereich liegen diese sind durch ein ";" getrennt.
-
long int k; //RSA Modul // ... char chv[255]; // ... publickey->k=(long int)chv;
Das kommt dir nicht irgendwie komisch vor? Was glaubst du, wieso der Compiler sich da ohne Cast weigert?
-
(long int)chv
Das tut nicht, was du glaubst.
Konstantin1507 schrieb:
if (flag==0) { //Auslesen von s chv[i] = c; //Zwischenspeichern } else { //Auslesen von k chv[i] = c; //Zwischenspeichern }
Du machst im if- und im else-Zweig dasselbe. Wozu also das if?
-
struct publickey { long int s; //Oeffentlicher exponent long int k; //RSA Modul }; char chv[255]; ... publickey->k=(long int)chv; // Was meinst du was hier passiert? // chv ist (in diesem Fall) ein Zeiger aufdas Array, wo du die (Zahl?)-Zeichen reinkopiert hast.
Du brauchst strtol und ein vernünftiges C-Buch
-
Ich bedanke mich vielmals für die schnelle hund konspirative kritik. Jetzt funzt es:))