Char in Int und Binär
-
Moin Leute!
Hab hier ein Programm, welches ein fest eigegebenes Char in ein Int umwandeln soll (ohne atoi) und auch in Binär ausgeben soll
ggf auch eine negative Zahl richtig ausgeben
Mittlerweile hab ich jedoch eine ACESS_VIOLATION und kann nicht weiter testen.
Erkennt ihr was?DIE .C
#include <stdio.h> #include <math.h> #include "1.h" int ctoi(char c) { int i; i = c-'0'; return i; } int stoi(char str[]) { int i = 0, j = 0, puffer[DIGITS+1], ret = 0, x; while(str[i] != '\0') { if(!(((int)str[i] > 47 && (int)str[i] < 58) || (int)str[i] == 45)) { printf("Ungueltige Eingabe!"); return 0; } puffer[i] = ctoi(str[i]); i++; } x = i; int temp[i+1]; while(i >= 0) { temp[j++] = puffer[--i]; } i = x; for(j = 0;j < i;j++) { ret += (int)(pow((float)10,(float)j)*temp[j]); } return ret; } void itob(int i, char str[]) { int k=0, n=0, flag=0, rest=0; char temp[32]; char *bin; if(i<0) { i = -i; flag = 1; } do { rest = i%2; i /= 2; temp[k++] = rest + '0'; }while(i>0); if(flag) { temp[k++]='-'; } else { temp[k++]=' '; } while(k>=0) { bin[n++] = temp[--k]; } bin[n-1] = '\0'; n = 0; do { printf("Rest:%c\n",bin[n]); } while(bin[n++] != '\0'); printf("\n\nZahl in Binaerschreibweise: %s ", bin); } int main (int argc, char* argv[]) { char puffer[DIGITS+1]; char *str = "-4711"; int x; printf("Ausgabe des Characters: %s\n",str); x = stoi(str); printf("Ausgabe des Characters als Integer: %d\n",x); itob(x,puffer); printf("Ausgabe des Characters in Binaerschreibweise: %s\n\n",str); return 0; }
DIE .H
#define DIGITS 16 int ctoi(char c); int stoi(char str[]); void itob(int i, char str[]);
-
Es wäre einfacher wenn du gesagt hättest in welcher Funktion der Fehler Auftritt.
Kann man dadurch feststellen, welcher printf noch ausgeführt wird.Nun denn, in itob steht
... while(k>=0) { bin[n++] = temp[--k]; } bin[n-1] = '\0'; ...
wenn k == 0 ist wird auf temp[-1] zugegriffen.
Nebenbei kannst du bei der Berechnung auch
ret = ret * 10.0 + temp[j];
schreiben.
-
DirkB schrieb:
Nebenbei kannst du bei der Berechnung auch
ret = ret * 10.0 + temp[j];
schreiben.
Oder noch besser
ret = ret * 10 + temp[j];
Edit:
Hab ein "noch" spendiert
-
Danke mngbd.