wie finden Sie die Länge der unsigned char-Zeiger in C?
Will ich finden, die Größe oder Länge eines unsigned char-pointer, die in einer Funktion, wo dieser Zeiger ist ein argument für diese Funktion.In der Nähe des Zeiger-Deklaration Größe kommt richtig.
Aber wenn ich versuche mich zu finden, Größe, Funktion es gibt 4.
Wie kann ich dies tun ?
#include <stdio.h>
//void writeFile(unsigned char *da);
void writeFile(char *da);
int main(int arc,char **argv)
{
unsigned char block_bmp[]=
{
0x0,0xff,0xff,0xff,0x0,0x0,0x0,0xff,0xff,0xff,0x0,0x0,0x0,0xff,0xff,0xff,//*16bytes*
};
printf("size::%d\n",sizeof(block_bmp));
writeFile(block_bmp);
}
//void writeFile(unsigned char *da)
void writeFile(char *da)
{
printf("%d\n",__LINE__);
printf("size::%d\n",sizeof(da));
printf("length::%d\n",strlen(da));
FILE *fp;
int i;
fp=fopen("/tmp/hexfile","wb");
for(i=0;i<3780;i++)
fprintf(fp,"%c",da[i]);
// fwrite(da,sizeof(unsigned char),sizeof(da),fp);
fclose(fp);
}
Sie sind verwirrend, die Größe der eine Typ, und der Länge string. Wenn Sie möchten, dass die letzteren, verwenden Sie einfach
können Sie laden Sie Ihr code. Es kann Ihre Frage klar.
strlen
.können Sie laden Sie Ihr code. Es kann Ihre Frage klar.
InformationsquelleAutor QtUser | 2014-04-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn es Punkte auf eine NULL-terminierte Zeichenfolge, verwenden Sie
strlen
. Wenn nicht, wird der Zeiger nur einige Speicher-Adresse für die aufgerufene Funktion, ohne zusätzliche Informationen über die Größe des Arrays (ich nehme an, Sie versuchen, ein array übergeben). Ich schlage vor, vorbei an der Anzahl der array-Elemente als zusätzlichen parameter an die Funktion.Wenn es ein string ist, dann haben Sie eine Lösung. Wenn es kein string ist (also nicht null-terminiert), dann gibt es keine Lösung.
Erbsenzählerei: C-"strings" sind entweder
NUL
- oder0
- odernull
-beendet werden.NULL
ist etwas anderes.Du hast Recht. Es tut mir Leid 😉
InformationsquelleAutor Callidior
Können Sie nicht verwenden
sizeof
in diesem Zustand. Sie sollten mit denstrlen
wenn das char-array ist NULL-terminiert.Wenn Sie übergeben array an eine Funktion, es zerfällt zu Zeiger, Sie können nicht
sizeof
auf dieser Zeiger um die Größe des Arrays. Diesizeof
gibst du 4 Byte (unter der Annahme 32-bit-Maschine).Beispiel:
InformationsquelleAutor
Wenn Sie eine Funktion aufrufen, wie
mit 'array' als argument, die Sie sehen, nur eine 'unsigned char *' nicht ein array mit 100 Elementen. Das ist der Grund, warum 'sizeof' zurück 4.
wenn Sie die post mehr von deinem code, den Menschen hier helfen kann.
InformationsquelleAutor R Sahu
Zeiger Größe
sizeof(any_pointer_variable)
wird nicht abhängig vom Datentyp, um die es geht, zu zeigen. Die Größe des Zeigers ist meist 4, dass ist das, was Sie sind immer in Funktion. und es ist nicht abhängig davon, wofür es Punkte zu. alle Zeiger haben gleiche Größe, unabhängig davon, welche Art Sie zeigen.ya. ich sagte normalerweise. da fand ich die meisten der Zeit, die Sie sind. ya es ist nicht notwendig.
Gibt es eine 64-bit-system haben
sizeof(int)
== 8? Noch nie sah, so: "in der Regel" ist hier falsch.ya ok. Ich änderungen an meiner Antwort. Danke.
InformationsquelleAutor LearningC