string senden über uart

OP #523266
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
...
  };
}
Gast #523289
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
#523415
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'.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren