Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: anonimo12121 en 4 Mayo 2010, 16:05 pm



Título: [C++][AYUDA] problema con sizeof
Publicado por: anonimo12121 en 4 Mayo 2010, 16:05 pm
hola.
Mi problema es que pongo un sizeof en una funcion que tiene de parametro 1 char *. pero no me dice los bytes que tiene la cadena que le meto.
aqui el code.

Código
  1. #include <iostream>
  2. using namespace std;
  3. int fake=0;
  4. void remlet(char buscar,char* entrada, char* salida,int num){
  5.  
  6.    char conv[2];
  7.    //char salida[sizeof(entrada)];
  8.    strcpy(salida,entrada);
  9.    //aqui es con el sizeof
  10.    for(int i=0;i< sizeof entrada;i++){
  11.        // esta variable la creado para saber cuantas veces hace el bucle y me sale 4. creo que el problema en que la variable es 1 puntero .
  12.        fake++;
  13.        if(entrada[i]==buscar){
  14.            itoa(num,conv,10);
  15.            if(conv[0]=='0'){
  16.                salida[i+1]='0';
  17.                salida[i+2]=conv[0];
  18.            }
  19.            else {
  20.                salida[i+1]= conv[0];
  21.                salida[i+2]= conv[1];
  22.            }
  23.            break;
  24.        }
  25.    }
  26. }
  27. char frase[]="personaje-01";
  28. char frase2[]="personaje-44";
  29. int main(int argc,char *argv[]){
  30.  
  31.    remlet('-', frase,frase2,22);
  32.    //a(frase,frase2);
  33.    cout << fake;
  34.  
  35.    cin.get();
  36.  
  37.  
  38. }
  39.  


Título: Re: [C++][AYUDA] problema con sizeof
Publicado por: Littlehorse en 4 Mayo 2010, 16:18 pm
En ese contexto, sizeof te da el tamaño del puntero (4 bytes). Utiliza strlen.


Título: Re: [C++][AYUDA] problema con sizeof
Publicado por: anonimo12121 en 4 Mayo 2010, 16:32 pm
ya se eso de strlen pero ya que estoy quiero encontrar algun soluccion para esto.


Título: Re: [C++][AYUDA] problema con sizeof
Publicado por: Littlehorse en 4 Mayo 2010, 16:38 pm
No hay solución. sizeof realiza su tarea en tiempo de compilación. No puede adivinar cual es el tamaño de la cadena en ese contexto, ya que lo que le estas pasando es un puntero.

Si declaras cadenas a nivel global, entonces úsalas. Cualquier contenido declarado a nivel global puede utilizarse en el contexto de cualquier función, por lo tanto no tiene mucho sentido pasarlas como parámetro en el ejemplo que pusiste. Si utilizas las cadenas globales, sizeof te devolverá lo que esperas, si usas un puntero, sizeof te devolverá el tamaño del puntero.
De la forma que lo quieres hacer no hay forma de solucionarlo.

Evita en lo posible las declaraciones globales al menos que realmente las necesites. Aunque como solo están una linea arriba del main, creo que te equivocaste en la declaración.

Saludos


Título: Re: [C++][AYUDA] problema con sizeof
Publicado por: anonimo12121 en 4 Mayo 2010, 17:12 pm
e pensado hacer lo siguiente
crear un variable en la funcion char a[]
hay copiar el contenido del puntero y sacar el valor ahora lo provare.

saludos.


Título: Re: [C++][AYUDA] problema con sizeof
Publicado por: Littlehorse en 4 Mayo 2010, 17:31 pm
No tiene sentido, pero en fin, si te pusiste como meta usar sizeof, haya vos  ;D

Saludos!


Título: Re: [C++][AYUDA] problema con sizeof
Publicado por: anonimo12121 en 4 Mayo 2010, 17:39 pm
por que no tiene sentido?


Título: Re: [C++][AYUDA] problema con sizeof
Publicado por: Littlehorse en 4 Mayo 2010, 17:42 pm
Porque no tiene sentido hacer una copia para luego usar sizeof. strlen te sirve perfectamente y puedes usarlo directamente con el char*.