Ich suche nach einer Funktion, um mir zu erlauben, die binäre Darstellung eines int zu drucken. Was ich bisher habe Aber wenn ich anrufe, bekomme ich die Ausgabe wie 000000000000000000000000000000000000xtpYy (Und ein Bündel unbekannter Charaktere. Ist es ein Fehler in der Funktion oder bin ich Druck der Adresse des Charakter-Arrays oder etwas Entschuldigung, ich kann einfach nicht sehen, wo Im NB Der Code ist von hier aus EDIT: Es ist nicht Hausaufgabe FYI, ich versuche, jemanden elses Bildmanipulation Routinen in einer unbekannten Sprache zu debuggen. Wenn aber es wurde als Hausaufgabe markiert, weil es ein elementares Konzept dann faires Spiel gefragt am 21. Juni 09 Um 17:42 Ihr String ist nicht null-terminiert. Stellen Sie sicher, dass Sie ein 0-Zeichen am Ende der Zeichenfolge hinzufügen, oder Sie können es mit calloc anstelle von malloc zuweisen, die null den Speicher, der an Sie zurückgegeben wird , Gibt es noch andere Probleme mit diesem Code: Wie verwendet, gibt es Speicher, wenn Sie es nennen, so dass der Anrufer verantwortlich für kostenlos () ing die zugeteilte Zeichenfolge. Youll Leck-Speicher, wenn Sie nur nennen es in einem printf-Aufruf. Es macht zwei Pässe Über die Zahl, die unnötig ist. Du kannst alles in einer Schleife machen. Heres eine alternative Umsetzung, die Sie verwenden könnten. Der zweite Parameter ist ein Zeiger auf einen Puffer, den Sie die Ergebniszeichenfolge speichern möchten. Wenn Sie keinen Puffer haben, können Sie NULL passieren und int2bin wird in einen statischen Puffer schreiben und an Sie zurückgeben. Der Vorteil dieser über die ursprüngliche Implementierung ist, dass der Anrufer nicht um freie () die String, die zurückgegeben wird Sorgen machen. Ein Nachteil ist, dass theres nur ein statischer Puffer, so dass nachfolgende Anrufe die Ergebnisse von früheren Anrufen überschreiben. Sie konnten die Ergebnisse nicht von mehreren Anrufen für spätere Verwendung speichern. Auch ist es nicht threadsafe, dh wenn du die Funktion auf diese Weise von verschiedenen Threads nennst, können sie sich gegenseitig Stränge klären. Wenn das eine Möglichkeit ist, muss man in deinem eigenen Puffer passieren, anstatt NULL zu übergeben. Wie so: antwortete Jun 21 09 um 17: 45Ill nur Adresse einige Dinge in Bezug auf gute Praxis. Das kann wohl sehr gut vereinfacht werden, aber ich versuche nicht, mich besonders darauf zu konzentrieren. Ich sehe nicht die Notwendigkeit, wenn (Nummer 0). Besonders in Bezug auf parse (). Sind Sie nur eine weitere Berechnung überspringen, wenn die Rücksendung 0 ist. Wenn Sie das tun, werden die Ausgänge am Ende nicht gedruckt, obwohl 0 eine gültige Zahl ist. Sie müssen nicht std :: endl in main () verwenden. Das spült auch den Puffer, der hier unnötig ist, und das macht es mehrmals. Verwenden Sie einfach n in einer print-Anweisung. Sie können es über main () definieren. So dass Sie den Funktionsprototyp entfernen können. Es braucht nicht die Befehlszeilenparameter nur main () tut. Seine Kontrollpfade und Rückkehr machen mir keinen Sinn. Wenn die if-Anweisung ausgeführt wird, zeigt sie eine Nachricht an und gibt 0 zurück. Wenn das else ausgeführt wird, gibt es eine umgewandelte Ganzzahl zurück. Stattdessen sollte die Funktion nur aufgerufen werden, wenn sie etwas analysiert, was ihre Hauptaufgabe ist. Die Funktionen sollten sich nur auf eine Sache konzentrieren. Lassen Sie den Anrufcode entscheiden, ob es angerufen werden soll. Theres keine Notwendigkeit für geschützt, wenn youre nicht mit Vererbung (ich glaube sogar Bjarne Stroustrup selbst hat bereut, das Schlüsselwort zu bereuen). Entweder wechseln sie zu privat. Oder entfernen Sie einfach das Schlüsselwort, da Klassen standardmäßig privat sind. Wenn du kein oder mehrere Datenmitglieder beibehältest, dann darf dieses Programm keine Klassen verwenden. Dieser enthält nur Funktionen, aber Klassenfunktionen sollen den Zustand eines oder mehrerer Datenmitglieder ändern. Stattdessen könnten diese Funktionen nur freie Funktionen sein (Nicht-Mitglied) und die Klasse ganz entfernt. Kann nur in eine einstimmige Aussage gemacht werden: Noch besser, da std :: string unterstützt. Verwenden Sie stattdessen: Die lokalen Variablen in inttobin () müssen nicht statisch sein. Sie brauchen nicht Ihre eigene Reverse-Funktion verwenden Sie einfach std :: reverse (). Wie rachet freak in den kommenten erwähnt hat, kannst du einfach mit std :: hex das IO manipulieren, wenn du diesen Wert anklickst. Darüber hinaus können Sie dies mit allen drei Nummern-Systeme tun. C-Programm drucken Integer Diese c-Programm bitten Benutzer, eine Ganzzahl eingeben und dann druckt es. Die Eingabe erfolgt über die Scan-Funktion und die Nummer wird auf dem Bildschirm mit printf gedruckt. C Programmiercode In c Sprache haben wir Datentyp für verschiedene Datentypen, für ganzzahlige Daten ist es int, für Zeichen Datum char, für Gleitkommadaten seine float und so weiter. Für große Ganzzahlen können Sie einen langen oder langen langen Datentyp verwenden. Um ganze Zahlen zu speichern, die größer als 218-1 sind, die der Bereich des langen langen Datentyps ist, können Sie Strings verwenden. Im untenigen Code speichern wir eine Ganzzahl in einem String und zeigen sie dann an. C-Programm, um Integer in einem String zu speichern Ausgabe des Programms: Vorteil der Verwendung von String ist, dass wir sehr sehr große ganze Zahlen speichern können. C Programmiersprache hat keinen eingebauten Typ, um große Zahlen zu behandeln.
Comments
Post a Comment