tamaño number length arreglo array c++ arrays size

c++ - number - Tamaño de la matriz estática



size of vector c++ (6)

En su lugar, use una plantilla de función que tenga un parámetro de plantilla sin tipo:

template <size_t N> void func(char (&a)[N]) { for (int i = 0; i < N; ++i) { cout << "a[" << i << "] = " << a[i] << endl; // Or whatever you want to do } }

Llamar:

char myArray[500]; // Or "static char myArray[500]", if you want func(myArray);

Se creará una instancia de una nueva copia de esta función para cada tamaño distintivo de la matriz con la que se invoque, por lo que si la llama con muchas matrices de diferentes tamaños, obtendrá algo de código inflado. Pero ese no es el caso.

Declaro una matriz de caracteres estática, luego la paso a una función. Cómo obtener el no. de bytes en la matriz dentro de la función?


No puedes. Las matrices en C ++ son punteros, y eso es todo lo que tienes: el puntero al comienzo de la matriz. Si resulta ser una cadena, puede usar strlen para medir su longitud. Si es otro formato conocido, puede calcular la longitud de acuerdo con ese formato.

Considera este código:

static char str[] = "hello world"; foo(str); bar(str); void foo(char* str) { // length of str is unknown } void bar(char str[]) { // length of str is still unknown }

Independientemente de si su parámetro de función es un char [] o un char *, no conoce el tamaño.

Sugiero pasar el tamaño como un parámetro separado.


Otra opción que tienes es crear una clase de cadena que gestione la cadena. Estoy seguro de que alguien ya lo hizo. La versión más primitiva es una estructura con un char * y la longitud del búfer, donde tiene que administrar manualmente el tamaño cada vez que cambia. El otro extremo del espectro es una clase de cadena completamente implementada, con funciones de sobrecarga y manupulación del operador.

Luego pasa esta clase a tu función y ya sabe el tamaño. En realidad, no es diferente luego de pasarlo como un parámetro separado; simplemente es una manera más fácil de administrar cadenas si todas son de diferentes longitudes.


int array_size = sizeof (Array) / sizeof (Array [0]);


No. No use arreglos. Use un vector en su lugar. En estos días casi no hay excusa para usar matrices porque no son seguras. AFAIK, son una de las razones principales de los problemas de software porque es muy fácil sobrepasar accidentalmente el final del conjunto.

Al usar un vector, ya no tiene que preocuparse por los desbordamientos del búfer. Y su función puede averiguar fácilmente el tamaño de la vecor.

#include <vector> vector<char> myVector; void DoSomething(vector<char> &v) { int sizeOfVector = v.size(); }


Tendría que pasarlo a la función. Puede usar sizeof () para obtener el tamaño de una matriz.

const char foo[] = "foobar"; void doSomething( char *ptr, int length) { } doSomething(foo, sizeof(foo));

Esta página de MSDN tiene más información sobre sizeof y tiene un ejemplo más grande.

Editar: * vea la respuesta de j_random_hacker para una técnica intrigante usando plantillas ... *