Mal davon abgesehen, daß "Warning" kein Fehler ist, lernt man daraus follgendes: die Funktionen der libc, die mit str anfangen, behandeln Strings, Zeichenketten. Diese bestehen in C aus chars, Buchstaben. Wenn man Arrays von uint8_t kopieren will, benutzt man mencpy().
Man hätte da auch nicht lange suchen müssen. Wie strcpy() definiert ist, steht in string.h. Daher (und nur daher) weiß das auch der Compiler. Typischerweise kann man sich das auch mit der IDE anzeigen lassen. Da steht, der Typ des ersten Parameter ist char*. Und der Compiler hat richtig bemerkt, bei zeile steht uint8_t *, also etwas anderes. Die Stringlibray ist für den Compiler genauso unbekannt, wie von dir geschriebener Code.
Man könnte das Problem umgehen, wenn man in string.h statt char * uint8_t * schreiben würde. Damit wäre dann natürlich jeder andere Code, der strcpy() benutzt kaputt.
Ein char ist etwas anderes, als uint8_t. In anderen, moderneren Sprachen werden Zeichen als Unicode dargestellt. Und das sind keine 8 Bit. Es schadet also nicht, sich auch in C daran zu gewöhnen, etwas pingeliger zu sein, wenn es um Strings geht.
Übrigens, der Compiler und die libc sind unterschiedliche Dinge. Der GCC ist immer der GCC und benimmt sich gleich. Die unterstützenden Libraries, zum Beispiel für Integer oder Long-Integer Mathematik etc. sind natürlich CPU-abhängig und damit unterschiedlich.
MfG Klebwax
Lesezeichen