undefined
19-10-2007, 12:38
Ich bin gerade beim C Lernen auf ein Problem gestoßen wo ich nicht weiß wie ich mein Programm korrekt umsetze.
Ich versuche einen unsigned int MAX als String zu behandeln diesen dann um zu drehen und wieder nach unsigned int zu Konvertieren.
Jedoch stoße ich hier auf zwei Probleme.
Wie kann ich die Speicherbelegung so festlegen das sprintf sauber Arbeitet?
Und wie kann ich mit atoi() eine String nach unsigned int Konvertieren?
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
/**
#define MAX_BUFFER UCHAR_MAX
Ergebnis:
4294967295
N=�5927694924
0
*/
#define MAX_BUFFER UCHAR_MAX * sizeof(unsigned int)
/*
Ergebnis:
4294967295
5927694924
0
*/
unsigned int reverse_numeric( unsigned int i )
{
char buf[MAX_BUFFER];
unsigned int out = 0;
unsigned int rn;
if ( i < 1 )
return 0;
for (rn = i; rn >= 1; rn/=10)
{
sprintf(buf,"%s%u",buf,(rn%10));
}
printf("%s\n", buf);
out = atoi(buf);
printf("%d\n",out);
return 0;
// return out;
}
int main(void)
{
// unsigned int start = 10061967;
unsigned int start = UINT_MAX;
printf("%u\n",start);
reverse_numeric(start);
return 0;
}
gcc -g -pedantic -fstack-protector -Wall -W -Wextra \
-Wunused -Wstrict-prototypes -Wstack-protector -Wbad-function-cast \
reverse_numeric.c -o reverse_numeric
Ich versuche einen unsigned int MAX als String zu behandeln diesen dann um zu drehen und wieder nach unsigned int zu Konvertieren.
Jedoch stoße ich hier auf zwei Probleme.
Wie kann ich die Speicherbelegung so festlegen das sprintf sauber Arbeitet?
Und wie kann ich mit atoi() eine String nach unsigned int Konvertieren?
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
/**
#define MAX_BUFFER UCHAR_MAX
Ergebnis:
4294967295
N=�5927694924
0
*/
#define MAX_BUFFER UCHAR_MAX * sizeof(unsigned int)
/*
Ergebnis:
4294967295
5927694924
0
*/
unsigned int reverse_numeric( unsigned int i )
{
char buf[MAX_BUFFER];
unsigned int out = 0;
unsigned int rn;
if ( i < 1 )
return 0;
for (rn = i; rn >= 1; rn/=10)
{
sprintf(buf,"%s%u",buf,(rn%10));
}
printf("%s\n", buf);
out = atoi(buf);
printf("%d\n",out);
return 0;
// return out;
}
int main(void)
{
// unsigned int start = 10061967;
unsigned int start = UINT_MAX;
printf("%u\n",start);
reverse_numeric(start);
return 0;
}
gcc -g -pedantic -fstack-protector -Wall -W -Wextra \
-Wunused -Wstrict-prototypes -Wstack-protector -Wbad-function-cast \
reverse_numeric.c -o reverse_numeric