Forum: Compiler & IDEs string senden über uart


von Markus R. (markusreichert)


Lesenswert?

Hallo zusammen,

ich habe ein kleines Testprogramm (siehe unten) geschrieben, welches mir 
über den Uart eine Zeichenkette ausgeben soll.

Allerdings bekomme ich beim "Build" folgendes Warning:
../test2.c:94: warning: passing argument 1 of 'uart_puts' from 
incompatible pointer type

Das Programm ansich funktioniert. Die Zeichen werden richtig gesendet. 
Allerdings würde ich gerne das Warning verstehen.

Wäre super, wenn mir jemand einen Tip geben könnte, warum das Warning 
ausgegeben wird.

Danke und Gruß
Markus



...

void uart_puts (char *s)
{
    while (*s)
    {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */
        uart_putc(*s);
        s++;
    }
}


int main(void)
{

char zeichen[7] = {'a','b',0xFF,'d'};

...
     uart_puts(&zeichen); //dies ist Zeile 94 im Programm
...
  };
}

von Oliver (Gast)


Lesenswert?

Bist du sicher, daß das funktioniert?

http://www.lysator.liu.se/c/c-faq/c-2.html

uart_puts erwartet einen pointer auf ein char.

zeichen ist ein array von chars. Als Funktionsparameter darf das wie ein 
pointer auf chars verwendet werden.
&zeichen ist ein pointer auf ein array von chars. Das ist vergleichbar 
einem pointer auf einen pointer auf char.

Richtig wäre:

uart_puts(char[] s)
{...}
uart_puts(zeichen);

aber
uart_puts(char* s)
{...}
uart_puts(zeichen);

ist auch erlaubt.

Oliver

von Karl H. (kbuchegg)


Lesenswert?

> uart_puts(char[] s)
> {...}
>
> uart_puts(char* s)
> {...}
>
> ist auch erlaubt.

Die Untertreibung des Jahres :-)
Beide Versionen sind absolut gleichwertig.
Historisch gesehen gab es ursprünglich nur
die Pointer Variante. Die Variante mit Array
Syntax ist erst sehr viel spaeter hinzugekommen
und hat einen grossen Nachteil: Sie suggeriert etwas
was nicht passiert. Auch bei der Variante mit Array
Syntax ist s immer noch ein Pointer. Die Array Sytax
ist nichts anderes als 'syntactic sugar' um den
Neulingen den Anblick von Pointern zu ersparen.
Sozusagen 'ein Pointer im Schafspelz'.


von Matthias (Gast)


Lesenswert?

....'ein Pointer im Schafspelz'...

Muss ich mir merken...

von Oliver (Gast)


Lesenswert?

http://www.lysator.liu.se/c/c-faq/c-2.html

Seit anno '66 (oder so) des letzten Jahrtausends hat sich auch C etwas 
weiterentwickelt :-)

Oliver

von Karl H. (kbuchegg)


Lesenswert?

Oliver wrote:
> http://www.lysator.liu.se/c/c-faq/c-2.html
>
> Seit anno '66 (oder so) des letzten Jahrtausends hat sich auch C etwas
> weiterentwickelt :-)
>

Wenn du auf 2.2 anspielst: Da gehts um ganz was anderes.
Bei Funktionsparametern sind [] und * absolut identisch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.