Größe eines Array hinter Pointer

Hallo zusammem.

Ich würde gerne die Größe eines Arrays in einer Funktion ermitteln.
Die Funktion bekommt dieses Array aber über einen Pointer übergeben.

z.B:
Code:
void print_size(char *buffer) {
   printf("Size: %i", sizeof(buffer));
}

int main(void) {
   char array[20];
  
   print_size(array);
}

Ich bekomme aber immer nur eine 4 augeben da der Pointer ja nru 4 Bytes groß ist.
Die frage ist also wie ich die reale größe des Array array in der Funktion print_size
herausbekomme und nicht nur die länge des pointers.

MFG Vogel
 
Einfach: gar nicht. Deshalb findet man in der WinAPI an den Stellen, wo ein Array übergeben wird, auch immer einen zusätzlich Anzahl-Einträge-Parameter.

Du kannst statt eines Arrays aber auch einen Vektor nehmen, der hat eine Size-Funktion eingebaut.
 
Könnte man so machen:
Code:
#include <vector>

using std::vector;

typedef vector<char> char_vector_type;

void print_size( char_vector_type buffer )
{
   printf( "Size: %i", buffer.size() );
}

int main()
{
   char_vector_type array( 20 );
  
   print_size( array );
}

Hilft dir das weiter? Informationen zum Thema std::vector gibt's in der MSDN. Übrigens ist std::vector das Mittel der Wahl, wenn es darum geht, Zeichenketten von API-Funktionen zu erhalten. In der Gegenrichtung ist std::string praktischer. Zu dem Thema hat Scott Meyers einige kluge Sachen geschrieben (in "Effective STL" oder so)
 
Da muss ich nochmal eben einen draufsetzen:

Mach statt:

void print_size( char_vector_type buffer )

besser:

void print_size( const char_vector_type& buffer )


Dann wird der Vektor als platzsparende Referenz übergeben. Wenn du den Vektor in der Routine selbst verändern willst, dann lass das const weg.
 
Zurück