Was bedeutet '\n'?



  • Ich habe hier ewtas Code in den ich mich einarbeiten möchte und verstehe eine Sache nicht.
    Was bedeutet '\n'?:

    void rs_send_s(unsigned char *s)
    {
    	unsigned char n=0;
    	while (s[n]!=0)
    	{
    		if(s[n]=='\n')
    ...
    

    Ich dachte bisher das steht für neue Zeile, aber das macht hier keinen Sinn.
    Eclipse bringt in der letzten Zeile einen Fehler: warning 185: comparison of 'signed char' with 'unsigned char' requires promotion to int

    Würde mich freuen wenn mir jemand helfen könnte.



  • '\n' steht für das Steuerzeichen Newline.

    s ist ein Zeiger auf unsigned char. '\n' ist aber vom Typ char (welcher i.A. signed ist).
    Deswegen konvertiert der Compiler alles nach int, da dort beide Datentypen ( unsigned char und char ) komplett reinpassen.

    Oder du machst aus s ein ` char*

    `

    void rs_send_s(char *s)
    {
        unsigned char n=0;
        while (s[n]!=0)
        {
            if(s[n]=='\n')
    

    Der Standard legt nicht fest ob char signed oder unsigned ist.

    Es ist sinvoll für Zeichen char zu nehmen.
    Für kleine Integerwerte kann man dann je nach dem signed char oder unsigned char nehmen



  • if(s[n]=='\n')
    

    Überprüft, ob im char-Array an n-ter Stelle ein newline character steht. Der Character '\n' steht schon für eine neue Zeile. Allerdings überprüft der Code nur, ob an der Stelle im Array ein Zeichen für eine neue Zeile steht. Es fügt keinen Zeilenumbruch ein.



  • Danke für die Antworten, jetzt verstehe ich es glaube ich.
    Mit char kommt auch kein Fehler mehr. Vielen Dank



  • skandal schrieb:

    warning 185: comparison of 'signed char' with 'unsigned char' requires promotion to int

    Das ist eine sehr kuriose Fehlermeldung. Zeichenkonstanten haben in C den Typ int und in C++ den Typ char , nicht signed char (das sind tatsächlich unterschiedliche Typen). Was für ein Compiler ist das denn?



  • Was für ein Compiler ist das denn?

    Ich nutze den SDCC ( Small Device C Compiler).



  • Dann weicht der bestimmt vom C-Standard ab, um für 8-Bit-Microcontroller effizienteren Code zu generieren.



  • Mh da könntest du leider recht haben 😞


Anmelden zum Antworten