typedef und pointer
-
Hallo zusammen,
ich habe ein Verständnisproblem mit Pointern und typedefs.
Es geht um folgenden Codeabschnitt:unsigned char a[10]; unsigned char *b=a; a[0]++; b[0]--;Dieser kompiliert einwandfrei.
Dasselbe mit Typedefs:
typedef unsigned char tSha1Hash[20]; tSha1Hash c; tSha1Hash *d=c; c[0]++; d[0]--;Bringt den Fehler:
error: cannot convert âunsigned charâ to âunsigned char ()[20]â in initialization
(Fehler in der Zeile
tSha1Hash *d=c;
)
Wenn ich allerdings folgendes tue,
tSha1Hash c; tSha1Hash *d=&c; c[0]++; d[0]--;erhalte ich die Fehlermeldung
error: cast to non-reference type used as lvalue
error: invalid lvalue in assignment
in der Zeile mitd[0]--;
-
b ist ein pointer auf unsigned char, d ist ein pointer auf ein array von unsigned char. Der typedef geht auf den gesamten Ausdruck, also inclusive des Array. Und dass die beiden nicht kompatibel sind sagt die Compilermeldung

-
Achso, danke !
Nur was kann ich tun?
Mein eigentliches Problem ist folgendes:typedef unsigned char tSha1Hash[20]; fillvalues(unsigned char *wert); // vorgegebene Funktion vom Betriebssystem void foo(tSha1Hash *outHashValue) { unsigned char xywerte[3000]; fillValues(xywerte); // rückgabe der Werte an outHashValue: for(unsigned int i = 0; i < SHA1_SIZE; i++) outHashValue[i]=md_value[i]; }Bei der Zuweisung, dann:
error: incompatible types in assignment of âunsigned charâ to âunsigned char [20]â
Denke mir ist klar woher der Fehler kommt, nurwie kann ich ihn vermeiden?

-
Unter C++ kannst Du hervorragend eine Referenz auf das Array übergeben:
void foo(tSha1Hash &outHashValue) { unsigned char xywerte[3000]; fillValues(xywerte); // rückgabe der Werte an outHashValue: for(unsigned int i = 0; i < SHA1_SIZE; i++) outHashValue[i]=md_value[i]; }(Alternativ kannst Du den Zeiger-auf-das-Array zu einem Array dereferenzieren:
void foo(tSha1Hash *outHashValue) { unsigned char xywerte[3000]; fillValues(xywerte); // rückgabe der Werte an outHashValue: for(unsigned int i = 0; i < SHA1_SIZE; i++) (*outHashValue)[i]=md_value[i]; })