Operation mit Strings
-
Guten Abend zusammen,
ich möchte mit einem C Programm von einer Dezimalzahl in ein anderes Zahlensystem zur Basis n umrechnen.
Folgendes Programm habe ich schon geschrieben:
ng code comes from C:\_Studium\lcc\lib\wizard\textmode.tpl. */ #include <stdio.h> #include <stdlib.h> #include <string.h> void Usage(char *programName) { fprintf(stderr,"%s usage:\n",programName); /* Modify here to add your usage message when the program is * called without arguments */ } void main(int argc,char *argv[]) { int zahl = 0; int basis = 0; int x = 0; int y = 0; char *temp; char *a[] = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"}; char *Ergebnis; //Benutzereingaben einlesen do{ printf("Bitte geben Sie einen ganzzahligen positiven Zahlenwert zu Basis 10 ein: "); scanf("%d", &zahl); } while ((zahl < 0) && (zahl > 32767)); do{ printf("Bitte geben Sie die Basis, in die umgerechnet werden soll, ein: "); scanf("%d", &basis); } while ((basis < 2) && (basis > 16)); //Umrechung x = zahl; Ergebnis = ""; temp =""; while(x > 0){ y = x % basis; x = (int)(x / basis); strcpy(temp,a[y]); strcat(temp,Ergebnis); Ergebnis = temp; temp = ""; } //Ausgabe der umgerecheten Zahl printf("Die Zahl %d ist im Zahlensystem zur Basis %d : %s",zahl,basis,Ergebnis); }
Beim Ausführen wird in den Ergebnis String ein Teil vom Text aus der Ausgabe mit gespeichert. Ich weiß aber nicht wieso.
Gruß
David
-
Du hast keinen Speicher für deinen Ergebnis-String allokiert.
Bitte noch einmal das Kapitel über Strings in deinem Buch lesen. In C gibt es so nämlich gar keine Strings.
-
Ist nicht auch das Array a falsch initialisiert?
Wäre es nicht so richtig:char a[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
weil ja char *a[] ein Zeiger auf ein Array ist.
MfG, Jochen
-
Janjan schrieb:
In C gibt es so nämlich gar keine Strings.
Verdammt
-
Janjan schrieb:
Du hast keinen Speicher für deinen Ergebnis-String allokiert.
Bitte noch einmal das Kapitel über Strings in deinem Buch lesen. In C gibt es so nämlich gar keine Strings.
es gibt in c keine strings, aaaaaaaaah ja!
http://tutorial.schornboeck.net/c_string.htm
-
ahja schrieb:
Janjan schrieb:
Du hast keinen Speicher für deinen Ergebnis-String allokiert.
Bitte noch einmal das Kapitel über Strings in deinem Buch lesen. In C gibt es so nämlich gar keine Strings.
es gibt in c keine strings, aaaaaaaaah ja!
http://tutorial.schornboeck.net/c_string.htmUnd was sind diese "Strings" jetzt? Richtig. Zeiger auf ein einzelnes Zeichen. Diese werden nur als Zeichenketten interpretiert, und zwar alle folgenden Zeichen bis zum terminierenden 0 Symbol.
Viele misinterpretieren char* immer als einen String-Datentyp.
-
Janjan schrieb:
ahja schrieb:
Janjan schrieb:
Du hast keinen Speicher für deinen Ergebnis-String allokiert.
Bitte noch einmal das Kapitel über Strings in deinem Buch lesen. In C gibt es so nämlich gar keine Strings.
es gibt in c keine strings, aaaaaaaaah ja!
http://tutorial.schornboeck.net/c_string.htmUnd was sind diese "Strings" jetzt? Richtig. Zeiger auf ein einzelnes Zeichen.
Falsch. Nächster Versuch.
-
Tim schrieb:
Janjan schrieb:
ahja schrieb:
Janjan schrieb:
Du hast keinen Speicher für deinen Ergebnis-String allokiert.
Bitte noch einmal das Kapitel über Strings in deinem Buch lesen. In C gibt es so nämlich gar keine Strings.
es gibt in c keine strings, aaaaaaaaah ja!
http://tutorial.schornboeck.net/c_string.htmUnd was sind diese "Strings" jetzt? Richtig. Zeiger auf ein einzelnes Zeichen.
Falsch. Nächster Versuch.
Und was soll daran falsch sein? char* ist ein Zeiger auf ein char. Ein char ist ein einzelnes Zeichen. Das ist Fakt. Es wird lediglich anders interpretiert.
-
Lies es doch einfach im Standard nach?
ISO/IEC 9899-1999 schrieb:
A string is a contiguous sequence of characters terminated by and including the first null character. (...) A pointer to a string is a pointer to its initial (lowest addressed) character. The length of a string is the number of bytes preceding the null character and the value of a string is the sequence of the values of the contained characters, in order.
-
Trotzdem haben Strings keinen eigenen Datentyp, darauf woltle ich hinaus. Bitte mitdenken, danke.
-
Janjan schrieb:
Trotzdem haben Strings keinen eigenen Datentyp, darauf woltle ich hinaus. Bitte mitdenken, danke.
Sorry, ich konnte das aus deinen Falschinformationen so nicht rauslesen. Und niemand hier hat jemals behauptet, dass es einen String-Datentyp gibt.
-
Janjan schrieb:
Trotzdem haben Strings keinen eigenen Datentyp, darauf woltle ich hinaus. Bitte mitdenken, danke.
Hier spielt das keine Rolle und auch nicht, wie du den Standard für dich auslegst. Du redest zuerst wirres Zeug und dann wirfst du uns vor, wir denken nicht im voraus, was du vielleicht gedacht haben kannst? Sorry, aber das war ein großer Unfug, was du da geschrieben hast.
-
Hi zusammen,
danke erst mal für die Infos und Vorschläge.
Ich habe mein kleines Prog folgendermaßen angepasst:void main(int argc,char *argv[]) { int zahl = 0; int basis = 0; int x = 0; int y = 0; int i = 0; char *a[] = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"}; char *Ergebnis[1]; //Benutzereingaben einlesen do{ printf("Bitte geben Sie einen ganzzahligen positiven Zahlenwert zu Basis 10 ein: "); scanf("%d", &zahl); } while ((zahl < 0) && (zahl > 32767)); do{ printf("Bitte geben Sie die Basis, in die umgerechnet werden soll, ein: "); scanf("%d", &basis); } while ((basis < 2) && (basis > 16)); //Umrechung x = zahl; i= 0; while(x > 0){ i++; y = x % basis; x = (int)(x / basis); char *Ergebnis[i]; strcpy(Ergebnis[i],a[y]); } //Ausgabe der umgerecheten Zahl printf("Die Zahl %d ist im Zahlensystem zur Basis %d :",zahl,basis); for(int j=i;j > 0 ;j=j+1) { printf("%s",Ergebnis[j]); } }
Jetzt möchte ich mein Ergebnis in ein Array speichern und das Array "Ergebnis" immer um ein Feld erweitern -> in Zeile 32. Geht das überhaupt? Kompilieren kann ich das Programm so, aber es funktioniert nicht...
Wenn ich ein Array in einer while-Schleife immer um eins erweitern kann, dann wie?
Gruß
David
-
Ich habe nun einfach vorher mal die Rechnung in der while-Schleife durchlaufen lassen und gezählt wie groß mein Ergebnis-Array sein soll.
Danach initialisiere ich das Array Ergebnis und führe ein weiteres Mal die while-Schleife aus, wo die Ergebnisse in das Array geschrieben werden. Aber in Zeile 41 kommt jetzt ein Access Violation Fehler.
Ich verstehe das nicht und bin in C auch nicht so der Crack. Bitte helft mir.
Gruß
David
void main(int argc,char *argv[]) { int zahl = 0; int basis = 0; int x = 0; int y = 0; int i = 0; char *a[] = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"}; //Benutzereingaben einlesen do{ printf("Bitte geben Sie einen ganzzahligen positiven Zahlenwert zu Basis 10 ein: "); scanf("%d", &zahl); } while ((zahl < 0) && (zahl > 32767)); do{ printf("Bitte geben Sie die Basis, in die umgerechnet werden soll, ein: "); scanf("%d", &basis); } while ((basis < 2) && (basis > 16)); //Vorberechnung x = zahl; i=0; while(x > 0){ i++; x = (int)(x / basis); } //Umrechung x = zahl; char *Ergebnis[i]; i=0; while(x > 0){ y = x % basis; x = (int)(x / basis); //strcpy(Ergebnis[i],a[y]); Ergebnis[i] = a[y]; i++; } //Ausgabe der umgerecheten Zahl printf("Die Zahl %d ist im Zahlensystem zur Basis %d :",zahl,basis); for(int j=i;j > 0 ;j=j+1) { printf("%s",Ergebnis[j]); } }