c++ - extraer - string c# ejemplos
TamaƱo de cadena literal (2)
El siguiente código
#include <iostream>
using namespace std;
int main()
{
const char* const foo = "f";
const char bar[] = "b";
cout << "sizeof(string literal) = " << sizeof( "f" ) << endl;
cout << "sizeof(const char* const) = " << sizeof( foo ) << endl;
cout << "sizeof(const char[]) = " << sizeof( bar ) << endl;
}
salidas
sizeof(string literal) = 2
sizeof(const char* const) = 4
sizeof(const char[]) = 2
en un sistema operativo de 32 bits, compilado con GCC.
- ¿Por qué
sizeof
calcula la longitud de (el espacio necesario para) la cadena literal? - ¿La cadena literal tiene un tipo diferente (de char * o char []) cuando se le da a
sizeof
?
-
sizeof("f")
debe devolver 2, uno para la ''f'' y otro para la terminación ''/ 0''. -
sizeof(foo)
devuelve 4 en una máquina de 32 bits y 8 en una máquina de 64 bits porque foo es un puntero -
sizeof(bar)
devuelve 2 porque bar es una matriz de dos caracteres, la ''b'' y la terminación ''/ 0''.
El literal de cadena tiene el tipo ''matriz de tamaño N de char'' donde N incluye el terminal nulo.
Recuerde, las matrices no se degradan a punteros cuando pasan a sizeof
.
sizeof
devuelve el tamaño en bytes de su operando. Eso debería responder a la pregunta número 1.;) Además, un literal de cadena es del tipo "array to n const char" cuando se pasa a sizeof
.
Sus casos de prueba, uno por uno:
-
"f"
es un literal de cadena que consta de dos caracteres, el carácterf
y el NUL de terminación. -
foo
es un puntero (editar: independientemente de los calificadores), y los punteros parecen tener una longitud de 4 bytes en su sistema. - Para la
bar
el caso es lo mismo que"f"
.
Espero que ayude.