Stringlänge bestimmen?



  • Hallo,
    wenn ich um eine Uhr abzubilden, schreibe...

    unsigned short second_str[5]="0", minute_str[5]="0", hour_str[5]="0";

    "scheint" es zu funktionieren, erwarten würde ich aber eigentlich das es mit [4] funktionieren sollte, da es ja nur Zahlen von 0-255 sein können!? meinetwegen eine Stelle mehr für \n, daher also [4]..warum aber geht es überhaupt erst ab [5]?

    wenn ich nicht =0 sondern = "0000" ist es wie erwartet bei [5] ok...

    unsigned short is doch definiert nach
    TYPE Size in Bytes
    unsigned short (int) 1 0..255



  • Kann es sein, dass du überhaupt keine Ahnung hast, was du machst?
    1. unsigned short ist nicht 0..255 (das Konstrukt gibts in C gar nicht), char ist so groß.
    2. Du hast Arrays von 5 shorts.
    3. Diesen Arrays weist du ein Stringliteral zu, was absoult keinen Sinn macht (kompiliert das überhaupt).

    Nimm char-Arrays für Strings!



  • unsigned short hat einen Wertebereich von mindestens 0 bis 65535. Warum sollte das überhaupt funktionieren, mit 4 oder mit 5, und was soll das bewirken?



  • wie gesagt..wie unsigned short definiert ist hatte ich ja dazu geschrieben..wieder so eine erfreuliche Geschichte an C.....
    unsigned Char ist ebenfalls von 0-255 das ist korrekt.

    Also laut meinen schlauen Büchern ist es in C völlig wurscht ob ich Char, int oder short schreibe, da C intern alles gleich verarbeitet....
    Ich glaueb ich bleibe doch bei Pascal...
    Wenn man da eine Frage stellt, gibt es eine Antwort und andere mlden sich vielleicht noch, weil sie Ideen zur verbesserung des codes haben..in C ist offenbar alles eine Glaubensfrage..und da sol man als Einsteiger klar kommen!!=

    Ich habe hier 4 C Bücher und in einigen wird angefangen mit
    void main (void)
    in anderen int main(void)

    Alle Bücher sind Top bewertet mit oft über 100 Bewertungen!!

    wobei es bei void main (void) schon wieder zu völlig sinnfreien Diskussionen kam..nur weil das im code stand!

    habe leider k.a. wie ich hier eine html Tabelle einfügen kann....



  • habe gerade mal in einem meiner "schlauen Bücher nachgesheen..offenabr leige ich nicht so falsch mit meinem C Gräul!!!

    Das steht!
    "Leider hängt die Anzahl der Bytes vom Rechner und vom Compiler ab. Mal ist ein int 2 Bytes, mal 4, mal 8. Was für ein Durcheinander. C zeichnet sich im Allgemeinen durch große Klarheit (Hüstel!!) und Eleganz aus, aber die Sache mit den Bytes pro Datentyp ging daneben. Die Erfinder von C liuefern aber meienr Meinung nach immerhin die zweitbeste Lösung....etcppp



  • corado schrieb:

    wie gesagt..wie unsigned short definiert ist hatte ich ja dazu geschrieben..

    unsigned short ist aber nicht so definiert wie du sagst. Was du wahrscheinlich meinst ist, dass dein Compiler das so macht, sich also nicht an den Standard hält und damit strenggenommen überhaupt kein C-Compiler ist.

    Ich nehm mal an, dass das irgendein obskurer Compiler für einen 8-bit-Controller ist. Du hast jetzt das Problem, dass deine Frage eigentlich niemand beantworten kann, der nicht zufällig denselben Compiler kennt. Alle anderen können nur rumraten. Wenn du in Standard-C schreiben würdest, könnte dir jeder C-Programmierer helfen.

    Also laut meinen schlauen Büchern ist es in C völlig wurscht ob ich Char, int oder short schreibe, da C intern alles gleich verarbeitet....

    Das stimmt so nicht. Kleinere Typen werden für Berechnungen in int umgewandelt, aber natürlich nicht als int gespeichert. Außerdem, wo wir gerade bei obskuren 8-Bit-Compiler sind: Dieses Verhalten ist zwar im Standard vorgegeben, aber bei manchen Compilern abschaltbar oder sogar standardmäßig abgeschaltet.

    Ich glaueb ich bleibe doch bei Pascal...
    Wenn man da eine Frage stellt, gibt es eine Antwort und andere mlden sich vielleicht noch, weil sie Ideen zur verbesserung des codes haben..in C ist offenbar alles eine Glaubensfrage..und da sol man als Einsteiger klar kommen!!=

    Deine Selbstzweifel haben doch mit der Frage nichts zu tun. Mach dazu einen eigenen Thread auf, oder behalte sie für dich, das ist lächerlich und lädt nur Trollereien ein.

    "Leider hängt die Anzahl der Bytes vom Rechner und vom Compiler ab. Mal ist ein int 2 Bytes, mal 4, mal 8. Was für ein Durcheinander. C zeichnet sich im Allgemeinen durch große Klarheit (Hüstel!!) und Eleganz aus, aber die Sache mit den Bytes pro Datentyp ging daneben. Die Erfinder von C liuefern aber meienr Meinung nach immerhin die zweitbeste Lösung....etcppp

    C wurde Anfang der 70er auf einem wohnzimmerschrankgroßen 16-Bit-Rechner erfunden. Wäre es in der Meinung dieses Autors etwa die beste Lösung gewesen, damals int für alle Ewigkeit auf 16 Bit festzulegen? (Die Sprache B, Vorgänger von C, kennt nur Wortbreiten von 36 Bit, die entweder als int, als Zeiger oder als 4 Zeichen zu je 9 Bit angesehen werden konnten. Ich bin froh, dass man in C die Weitsicht hatte, sich vom gerade zufällig vorliegenden Rechnermodell zu lösen.)



  • corado schrieb:

    wie gesagt..wie unsigned short definiert ist hatte ich ja dazu geschrieben..wieder so eine erfreuliche Geschichte an C.....

    Nein, unsigned short ist nicht so definiert!

    Also laut meinen schlauen Büchern ist es in C völlig wurscht ob ich Char, int oder short schreibe, da C intern alles gleich verarbeitet....

    Nein.

    in C ist offenbar alles eine Glaubensfrage..

    Das hat nichts mit Glaubensfrage zu tun.

    Ich habe hier 4 C Bücher und in einigen wird angefangen mit
    void main (void)
    in anderen int main(void)
    Alle Bücher sind Top bewertet mit oft über 100 Bewertungen!!

    http://xkcd.com/937/
    Bewertungen machen Anfänger und Anfänger haben keine Ahnung, was gut ist.
    Trau keinen Bewertungen.

    wobei es bei void main (void) schon wieder zu völlig sinnfreien Diskussionen kam..nur weil das im code stand!

    Willst du nicht, dass man falsche Sachen berichtigt? void main ist falsch.

    corado schrieb:

    Das steht!
    "Leider hängt die Anzahl der Bytes vom Rechner und vom Compiler ab. Mal ist ein int 2 Bytes, mal 4, mal 8. Was für ein Durcheinander.

    Durcheinander ja, aber C unterstützt halt alles, deswegen kann es solche Sachen nicht garantieren.



  • Du vergleichst eine (bestimmte) Pascalimplementierung mit dem C-Standard, der für viele verschieden Rechnerarchitekturen gilt.

    Du redest nicht von dem Urpascal von Nikolaus Wirth, nutzt aber Bücher über C aus demselben Zeitraum.

    Irgendwie passt dass nicht zusammen.

    Wenn du nicht bereit bist C zu lernen, dann lass es eben sein.

    Wenn du meinst, du bist bereit, dann lerne die Grundlagen. Denk aber daran, dass du dann nicht Pascal hast.
    Du musst dann lernen mit den Freiheiten, die dir C gibt, auch umzugehen.



  • 32Bit Conrtoller, und ob Obskur kann ich nicht sagen..
    Der Pascal Compiler der gleichen Firma funktioniert so wie Auch Turbo apscal oder andere...

    Daher komtm man da als Anfänger natürlich ständig ins schleudern!!

    In irgendwinen Onlinekurs definiert sich der Autor zur besseren Übersicht sogar erstmal ein BYte aus einem Char!?
    Da soll man nicht die Kriese bekommen?

    Und der nutze glaube ich sogar den berühmten GCC in der C Version!



  • keins meiner Bücher ist älter als 8 Jahre....
    Sind es Freiehiten?!?
    wenn void main(void) angeblich falsch ist..obwohl es geht?!
    hmmm

    Mir selber erscheint void main (void) nicht mal falsch doer unlogisch, im Gegenteil, aber den Foren gibt es dann schon weider Streitereien...leider

    Ich will C ja auch gar nicht schlecht machen, es gefallen mir wie gesagt auch viele Sachen! aber diese offensichtlichen Kleinigkeiten nerven!



  • void main ist falsch.
    Der C Standard definiert den Rückgabetypen als int.
    Viele Compiler unterstützen das aber aus Kompatibilitätsgründen, aber richtiger wird es dadurch nicht.



  • corado schrieb:

    32Bit Conrtoller, und ob Obskur kann ich nicht sagen..
    Der Pascal Compiler der gleichen Firma funktioniert so wie Auch Turbo apscal oder andere...

    Daher komtm man da als Anfänger natürlich ständig ins schleudern!!

    Wieso sollte? Die meisten Anfänger interessiert es nicht, ob es für irgendeinen Controller auch einen Pascal-Compiler gibt. Das ist deine persönliche Situation.

    In irgendwinen Onlinekurs definiert sich der Autor zur besseren Übersicht sogar erstmal ein BYte aus einem Char!?
    Da soll man nicht die Kriese bekommen?

    Bei den meisten "Onlinekursen" krieg ich die Krise, ja. Aber wahrscheinlich aus anderen Gründen als du.



  • corado schrieb:

    Ich will C ja auch gar nicht schlecht machen, es gefallen mir wie gesagt auch viele Sachen! aber diese offensichtlichen Kleinigkeiten nerven!

    Kleinigkeiten?
    Der Sprachumfang von C ist sehr minimal, das meiste ist in Funktionen verlagert und die haben
    eine festgelegte Syntax. Am besten hält man sich daran!

    Pascal war einnmal sehr schön und einfach. C und die daraus entstandenen Weiterentwicklungen
    bieten aber deutlich mehr. Vergiss Pascal und kaufe dir ein schlaues Buch zu C!

    Zur Frage zu strings:
    Diesen Datentyp gibt es in C nicht. Strings werden als array von char mit dem abschliessenden Nullzeichen
    ´\n´ gehandhabt.

    Wer an solchen Dingen verzagt, sollte Programmieren sein lassen! 😞



  • ... mit dem abschliessenden Nullzeichen ´\0´ gehandhabt. ²

    Dieses Zeichen hat den Wert 0. Das ist nicht das Zeichen, das die 0 (Null) darstellt.

    ^²passiert mir auch manchmal, dass ich da '\n' schreibe :-)^


Log in to reply