Größe des Arrays wird nicht durch eine Funktion übergeben. Beispiel:
int my_getsize(int* ptr)
{
return sizeof(ptr);
}
int main()
{
int arr[100];
printf("%d\n", sizeof(arr)); //output: 400
printf("%d\n", my_getsize(arr)); //output: 4
}
In einem 32-Bit-System my_getsize(buf)
4 liefert, die die Größe des Zeigers ist. Während sizeof(buf)
400 zurückgibt, ist das 100 * sizeof(int)
(auch 4). Der einzige Weg dazu ist, die Array-Größe an die Funktion zu übergeben. Beispiel: foo(arr, sizeof(arr)/sizeof(arr[0]))
Zeichenarrays sind ein Sonderfall, da die Zeichenfolge nullterminiert ist. Sie können nach der letzten Null im Array suchen. Beachten Sie jedoch, dass dies die Array-Größe, die den Null-Terminator enthält, nicht zurückgibt. Es ist das gleiche wie strlen
. Beispiel:
size_t my_strlen(char* ptr)
{
size_t iSize = 0;
while (*ptr++) iSize++;
return iSize;
}
Für char buf[] = "12345"
, sizeof(buf)
6 ist, während strlen(buf)
5. ist in der Regel müssen Sie nicht über die Optimierung mit dieser Art von einfachen Funktionen sorgen, weil der Compiler für Sie tut es.
Mögliche Duplikate von [Konvertieren einer hexadezimalen Zeichenkette in eine ganze Zahl effizient in C?] (Http://stackoverflow.com/questions/10324/convert-a-hexadecimal-string-to-an-integer-efficiently-in- c) – Matt
Um die Länge einer nullterminierten Zeichenfolge zu finden, verwenden Sie 'strlen'. Basierend auf Ihrer Beschreibung ist das was Ihnen wichtig ist, nicht die Größe des Arrays. –
Haben Sie darüber nachgedacht, Ihre ganze Funktion zu ersetzen, die eine Hex-Zeichenfolge in eine Zahl mit einer Funktion 'strtol' konvertiert? – Matt