Feld in Funktion übergeben
-
Hier mein Programm zur Umwandlung einer Binären Zahl in eine Dezimale.
Ich möchte jetzt aber das die eingabe der Zahl im Main-Programm gemacht wird und der inhalt des feldes dann in die Funktion zur berechnung übergeben wird.
Ich weiß aber leider nicht wie die aufrufe dafür heißen.int binaertodezimal(){ char binaer[len] unsigned int y; int erg = 0; int mult = 1; printf("Zahl: "); scanf("%s", binaer) for (y = 0; y < len; y++){ if (binaer[y] == '\0'){ break; } } for (y = y-1; y < len; y--){ if (binaer[y] == '1'){ erg += mult; } mult *= 2; } return (erg); }
-
int binaertodezimal(char* binaer) { ... } int main(void) { char bin[len]; //Binärzahl eingeben lassen printf("%s(2) = %d(10)\n",bin,binaertodezimal(bin)); }
-
#include <stdio.h> #include <string.h> int bin_to_dec ( char* binaer, unsigned int len ) { unsigned int y; int erg = 0; int mult = 1; for (y = 0; y < len; y++) { if (binaer[y] == '\0') { break; } } for (y = y-1; y < len; y--) { if (binaer[y] == '1') { erg += mult; } mult *= 2; } return erg; } int main() { char bin[256]; printf("Zahl: "); scanf("%255s", bin ); printf( "%d\n", bin_to_dec( bin, strlen(bin) )); return 0; }
Gruuhuuuß,
p.
-
proggingmania schrieb:
...
char bin[256];
...
scanf("%255s", bin );Boom! Und schon einen Buffer Overflow gebaut.
-
viel schlimmer finde ich, dass diese bin-to-dec oder eigentlich egal welche umwandlungsfunktionen von zahlenformaten immer so saumässig umständlich ausfallen.
ich bin für ein faq mit code für alle umwandlungen...
-
pale dog schrieb:
viel schlimmer finde ich, dass diese bin-to-dec oder eigentlich egal welche umwandlungsfunktionen von zahlenformaten immer so saumässig umständlich ausfallen.
Sehr seltsame Risikobewertung.
-
Cool danke jetzt funzt es!
Kann mir vllt auch noch jemand sagen wie ich das feld(rest)zurückgeben kann???
Also das ich es nicht in der Funktion ausgeben muss.int dezimaltobinaer(int zahl){ int rest[10]; int i; int y=0; for (i=0;i<10;i++){ rest[i]= zahl%2; zahl= zahl/2; } printf("Ausgabe\n\n"); while (i>0){ i--; printf ("%d", rest[i]); } return (0); }
-
Im einfachsten Fall lässt du dir ein Array übergeben, das du dann befüllst. Oder du übergibst es als int* Rückgabewert (aber dann mußt du dafür sorgen, daß dein Array das Ende der Funktion übersteht).
-
Man muss sagen ich bin noch am Anfang der C-Programmierung.
Deshalb versteh ich nicht wirklich was du mir sagen willst
-
Am einfachsten machst du das Feld einfach global, deklarierst es also außerhalb deiner dezimaltobinaer Funktion.
char rest[10] = {"\0"};
-
Global Player schrieb:
Am einfachsten machst du das Feld einfach global, deklarierst es also außerhalb deiner dezimaltobinaer Funktion.
@mtx: Wenn du lernen willst, sauber zu coden, solltest du diesen Hinweis gleich wieder vergessen. Globale Variablen sind böse.
An sauberen Lösungen kann ich dir drei anbieten:
- der Aufrufer legt das Array an:
void dez2bin(int zahl, char res[]/*optional: */,int ressize) { //erzeuge den Binärstring in res - notfalls mit Bereichsüberwachung } int main() { char binaer[9]; dez2bin(255,binaer/*,9/) printf("255 ist %s",binaer); }
Du mußt nur sicherstellen, daß du genug Speicher bereitstellst
- Datenanforderung auf dem Heap:
}[/cpp]Der Aufrufer muß zwar nicht mehr wissen, wieviel Platz er braucht, aber er muß den reservierten Speicher wieder freigeben - statische Variable:
char* dez2bin(int zahl) { static char res[8*sizeof(int)+1]; //erzeuge den Binärsting in res return res; } int main() { char* binaer = dez2bin(255); printf("255 ist %s",binaer); //geht sogar kürzer: printf(" und 1025 ist %s",dez2bin(1025)); }
Wichtigster Nachteil hier: Du mußt die Rückgaben sichern, bevor du das nächste Mal deine Funktion aufrufst, weil sie sie sonst überschreibt