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 - AlbertoBSD

#691
Donde termina tu funcion menu?

falta un } para el switch o para la funcion, ademas ya estando en tu funcion llenarNomina no se que realice.. tal vez tratas de escribir fuera de los limites de la memoria o algun otro tipo de error.

saludos!
#692
Buenas!!

Estoy haciendo un pequeño servidor WEB en C, algo basico y como ejercicio, ya que este algo pulido dejare el link al codigo por aqui.


El detalle que me encuentro es que quiero crear una función de argumentos variables asi como el printf donde le ahorre al usuario "final" ( :rolleyes: :rolleyes:) el reservar memoria para el buffer de respuesta al cliente. para ello solo creare una función llamada "server_print" donde el usuario colocara su formato de cadena y las variables que el quiera. Y que la función haga el trabajo duro...

session es un contenedor de variables auxiliares y ese de momento, se puede obviar...

void server_print(struct peticion *session,char *format,...) {
char *buffer = NULL;
int X;
va_list args;
va_start(args, format);
buffer =malloc(X);
vsnprintf(buffer,X,format, args);

//realizar operaciones sobre session...


va_end(args);
}


Lo que me interesa saber es el cuando debe de valer X para reservar esa cantidad de memoria exacta.. el detalles esta en que puedo ahórrame el "pensar" y asignar MUCHA memoria por cada argumento del programa, pero el detalle esta en que:

¿Que pasa si no alcanza?

Quiero tener un programa eficiente que no malgaste memoria y sea rápido...

Se me ocurre buscar en la cadena de formato por cada % que se encuentre y por ejemplo si es un Entero reservar solo 12 bytes mas, si es cadena sacar el strlen del argumento en cuestion, si es %l dejar sobre 30 bytes mas y asi...

¿Como procederían ustedes?

Saludos!
#693
Hola tienes que declarar primero el arreglo antes de llamar a las funciones mencionadas

Ejemplo:

void menu(){
int N[filas][columnas];
   int opc;
   printf("MENU\n");
   printf("1. Nueva Nomina\n");
   printf("2. Mostrar Todas las Nominas\n");
   printf("Ingrese opcion: ");
   scanf("%d",opc);

   switch(opc){
      case 1:
         /*Estoy tratando de hacer que cuando ingrese a la opcion 1, vaya directamente a la función llenarNomina*/
         llenarNomina(N); // Aca me da un severo error
         break;
      case 2:
         mostrarNomina(N);
         break
      default:
         printf("Opcion Incorrecta");
}
#694
La de numeros se puede mejorar

if (a[i]>='0' && a[i]<='9' )

ahora cambia el gets por fgets:

fgets(cad,500,stdin);

ya que con el gets eres vulnerable a buffer overflow (Si le metes mas de 500 caracteres vas a sobre escribir variables del programa)

Saludos!
#695
Tu idea esta bien, te sirve bastante si no quieres estar moviendo los registros "fisicamente" en su posicion del archivo.

Asi solo guardas en un arreglo externo que el registro X del archivo esta en el orden TAL.

Y podrias implementar una busqueda casi binaria por ejemplo tienes 1000 Registros y buscas por la letra T o no se la palabra tocar, vez quien es el registro 500 y si la palabra tocar es mayor te desplazas 250 registros mas adelante y buscas en el registro 750 y si es mayor o menor te desplazas 125 registros adelante o atras y asi sucesivamente. Para buscar rapidamente la palabra tal....

Saludos!

#696
Programación C/C++ / Re: [C++]Cpr - cURL para humanos
15 Septiembre 2016, 16:42 PM
Tienes que agregar parametros de linkeo al compilador esto es:

g++ -o test test.cpp `curl-config --cflags` `curl-config --libs`

si ejecutas curl-config --libs te deberia de devolver algo -lcurl -L/usr/.....

Eso es lo que falta para incluir el Curl
#697
Estoy desarrollando una app y ahora tengo que poner un limite al numero de trackers que puede tener un torrent.

En teoria no debería de tener limite lo se, pero si vemos la mayoria de los links magnet en TPB solo vienen con unos 3 o 5 trackers

Pero no encuentro ningun documento que especifique un limite claro.

En mi caso he optado por 16 trackers esto solo lo pregunto para optimizar el tamaño de almacenamiento, ya en ejecucion puede crecer lo que sea necesario.

Saludos
#698
El unico error que veo es el del scanf, que ... volvemos al Retorno de Linea que el scanf no procesa y lo termina agarrando el getche...

Cuanto ingresas un valor 10+Enter estas ingresando lo siguinte:

10\n\r

No recuerdo si es \n\r o \r\n el punto es que son 2 valores los que se manda cuando das un Enter

Entonces el Scanf procesa los números 10 y cuando detecta el primer caracter no numerico se detine y deja colgando un byte adicional en el buffer y este llega al getche y lo guarda en tu variable carta.palo

Entonces deberia de poner algo asi:

void CARGA(t_carta carta)
{
    printf ("Ingrese el numero de la carta: \n");
    scanf("%d",&carta.numero);
    getche(); //o getchar(); lo que quieras, es solo para que leas el byte mas que esta en tu buffer de entrada
    printf ("\nIngrese el palo:  E = ESPADA  || O = ORO || C = COPA || B = BASTO \n");
    carta.palo=getche();
    printf("\nIngrese el valor de la carta: \n 1 de espada = 10\n1 de Basto = 9\n7 Espada = 8\n7 Oro = 7\n3 = 6\n2=5\n1=4\nFiguras=3\n7 Otro = 2\nLo Demas=1\n");
    scanf("%d",&carta.valor);
}


Saludos!
#699
CitarOh, y yo dejaría de usar ese strtok cuanto antes. Si es un servidor, es probable que pretendas hacerlo multi-thread.

Muy bien acabo de ver los problemas que implica y al parecer no debo de usarlo xD usare strtok_r en su lugar con un 3 parametro para salvar el estado de la funcion.

Saludos
#700
Muchas gracias por contestar, sabia que te interesaria el topic.

CitarTambién cuidado al programar el GET pues por lo general sirve archivos, y pueden hacer algo como "GET ../../passwords.txt HTTP 1.1"

Claro que habia considerado los dotdotpwn... de hecho el recurso siempre lo valido, contra una tabla de recursos validos, si existe lo carga pero con el segundo campo de mi tabla (Un archivo previamente validado con su path valido).

Ya he validado tambien los headers y solo estoy trabajando para leer los datos cuando se trata de un POST, estoy haciendo una pequeña tabla de estados para saber que es lo que sigue y en caso de no coindidir el numero de tokens o alguna otra variable marque error.

Saludos!