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.


Anmelden zum Antworten