Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - crack81

#71
Hola primero que nada gracias por el aporte, se mira genial aun no lo pruebo   :P  ya que ando en linux pero pronto  lo hare.

Bueno en fin vengo con una serie de dudas:

Porque te declaras y reservas dos punteros char y no los liberas?
char *cDir = (char *)malloc(sizeof(char) * 200);
const char *cData = (char *)malloc(sizeof(char) * 140);


Ademas que necesidad hay de reservar memoria dinamicamente?
segun vi *CDir lo utilizas en la funcion void ChromeDirectory(char *Disk, char *cDir)

Pero viendo la implementacion:
void ChromeDirectory(char *Disk, char *cDir)
{
 DWORD I = 40;

 GetUserName(CurUser, &I);
 sprintf(cDir, "%sUsers\\%s\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Login Data", Disk, CurUser);
}


Para lo unico que lo utilizas es para pasarle la referencia a la funcion    sprintf
Entonces por que no evitamos resevar dinamicamente y lo hacemos todo en la pila
ejemplo;

char cDir[200];

y basta con pasarle la referencia
ChromeDirectory("C:\\", &cDir);

Mismo caso para la variable
const char *cData = (char *)malloc(sizeof(char) * 140);


se puede reservar en la pila:
const char  cData[140];

Pero segun veo en tu codigo esa variable cData sirve para obtener el contenido de la funcion sqlite3_column_text()
que segun su documentacion: https://www.sqlite.org/c3ref/column_blob.html
retorna un const unsigned char *, lo cual me indica que al final todo eso que reservaste con malloc en la variable cData de nada sirve ya que terminara apuntado a otra direccion y sera imposible liberar la memoria que has reservado.

Conclusion para la variable cData segun la documentacion no es necesario reservarle memoria ya que solo funciona como apuntador, basta con que la declararas asi:
unsigned char *CData=NULL

Espero mis comentarios no sean tomados a mal.
Saludooss y buen trabajo  :P



#72
Supongamos  que tienes tus bytes 00 y AC  en tu archivo y los lees como numeros enteros y no como caracteres y los quieres comparar con tu puntero de char que ya tienes en tu programa en formato hexadecimal

Pues lo mas claro para mi es convierte esos punteros char en un valor entero y luego haces la comparacion:

Como en este ejemplo, la conversion la hago con una funcion llamada strtol que viene incluida en la biblioteca cstdlib referencia:http://www.cplusplus.com/reference/cstdlib/strtol/

Ejemplo:

Código (cpp) [Seleccionar]
#include <iostream>
#include<ctype.h>
#include <cstdlib>
using namespace std;

int main()
{

    const char* x="00AC";
    uint8_t valor=(uint8_t)strtol(x,NULL,16);
    uint8_t z =0x00AC;

    if(valor==z)cout<<"son iguales"<<endl;
    else cout<<"son diferentes"<<endl;

    return 0;
}


Si hay dudas comenta
Saludos...
#73
Hola exactamente que quieres hacer?

Quieres comparar si la cadena x o y corresponde a algun valor del arreglo z
ademas como definiste ese tipo byte segun yo tengo entendido el byte no existe en c o c++ y lo mas parecido en tamaño es un char

Hola como mencione arriba no se exactamente que quieres hacer pero intuyendo que quieres comparar las variables, una solucion podria ser:

Código (cpp) [Seleccionar]
#include <iostream>
#include<ctype.h>
using namespace std;

int main()
{

    unsigned char x[]={0x00,0xAC};
    unsigned char y[] ={0x0C,0xC0};
    uint8_t z[] = {0x00, 0xAC}; //se puede simular ocmo unsigned char

    if(x[0]==z[0] && x[1]==z[1]) cout<<"son iguales"<<endl;
    else cout<<"no son iguales"<<endl;

    return 0;
}



De entrada por que el tamaño de las estructuras es diferente ya que el puntero x posee cuatro elementos encontra de el arreglo z  solo posee dos, como muestro en el codigo de arriba un equivalente de codigo a:
Código (cpp) [Seleccionar]
char *x = "00AC es:
Código (cpp) [Seleccionar]
char x[]={'0','0','A','C'}; lo cual muestra que jamas podrian ser iguales.


PD: En C/C++ no existe el tipo de dato byte lo mas cercano es unsigned char
o utilizando la bibilioteca ctype.h puede especificar un tipo de dato de 8 bits sin signo que es el equivalente a 1 byte
Salutos..
#74
Hola añadiendo a lo que dice fary  te dejo este ejemplo

Código (asm) [Seleccionar]
mov al,13 ; al =13
cmp al,13 ; comparamos si al es igual a 13
JB etiqueta ; salta si el primer operando es menor que el segundo operando( al<13)

;si no salta es que el primer operando es mayor o igual que el segundo operando

salir:
ret


etiqueta:  ;si el primer operando es menor que el segundo llegamos hasta aqui
;codigo
JMP salir ;saltamos a salir


JBE es similar a JB con la diferencia de que salta si el primer operando es menor o igual que el segundo operando

Código (asm) [Seleccionar]
mov al,13 ; al=13
cmp al,21;comparamos los dos operandos
JBE etiqueta ;salta si el primer operando es menor o igual  que el segundo operando( al<=21)


Si tienes dudas avisa.
//Salutos...
#75
Programación C/C++ / Re: Ayuda urgente con c
28 Marzo 2016, 07:28 AM
Hola no he revisado todo tu codigo pero estas lineas estan mal


struct grupo a[totalAlum];

struct grupo b[totalAlum];

No puedes crear arreglos dinamicos de esta manera, tienes dos opciones o especificarle un valor en tiempo de compilacion ejemplo:

struct grupo b[10];


La otra opcion es usar punteros y la funcion malloc para reservar memoria en el heap y poder crear tu arreglo dinamico, el cual puede varia su tamaño en tiempo de ejecucion.

Ejemplo:

struct grupo *b=malloc(totalAlum*sizeof(struct grupo));

Recordando de liberar la  memoria del arreglo usando la funcion free:

free(b);

Si tienes dudas avisas.
Salutos....



#76
Cual es el error que muestra?  o mas bien con que numero ingresado aparece el error

Saludos..
#77
No te entiendo, codigoPoliza es el enum o enumerado y tPoliza es el struct o estructura

si tienes dudas avisa saludos..
#78
Hola de lo que habla Stakewinner00 es de pasarle el valor escodigo por medio  del parametero de la   funcion setTipoCliente(float tc);

Ejemplo:
Código (cpp) [Seleccionar]
int main (int argc, char *argv[]) {

ClienteNube cle1;
float tipoCliente=0;
cin>>tipoCliente;
cle1.setTipocliente(tipoCliente);



return 0;
}
#79
Hola hay muchas forma de implementar una solucion, una manera puede ser usando struct y enumerados.

Una forma puede ser esta.

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

enum codigoPoliza{
    Hcm =1,
    Vehiculo=2,
    Siniestros=3,
    Hurto=4,
    TodoRisgo=5
};

struct tPoliza{
    codigoPoliza cPoliza;
    char descripcion[255];
    double costo;
};


int main()
{
     tPoliza poliza1;
     poliza1.cPoliza=Vehiculo;
     poliza1.descripcion="Cubre perdida total y danos a terceros";
     poliza1.costo=1200;
     
     tPoliza poliza2;
     poliza1.cPoliza=TodoRisgo;
     poliza1.descripcion="Cubre vehiculos,hurto,dano a hogar,siniestros etc.";
     poliza1.costo=7000;
   

    return 0;
}
#80
Bueno yo nunca he tenido problemas pero si no como te indique puedes usar netbeanse o visual studio este ultimo el mas completo