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

#11
Programación C/C++ / Re: problema con if
23 Octubre 2015, 06:23 AM
¡ Buenas d91 !

EL problema del bucle infinito creo que lo tienes en la linea 15
Citarwhile(lista != NULL){
Para salir de ese bucle necesitas que en algun momento la variable lista sea igual a null y eso nunca ocurre, al final pones lista=aux; pero aux no esta inicializado a null asi que nunca salimos del bucle.

un saludo.
#12
¡Buenas a todos!

¿Porque esto no imprime un 5 en la salida?


#include <stdio.h>

void funcion1(int numero1){
  numero1=5;
}

int main(){
  int numero1=0;
  funcion1(numero1);
  printf("%d\n",numero1);
  return 0;

}


Se que esto se podria hacer muy bien con una funcion...pero es que esto lo quiero hacer con un procedimiento mas grande y no se porque esto no funciona...¿como lo deberia escribir para que funcionase usando un void?

¿alguna idea?

gracias.
#13
Programación C/C++ / Re: Problemas con printf();
20 Octubre 2015, 00:57 AM
vaaaaaleeee!!! ya di con la solucion. Tenia que utilizar el strncpy() e inicializar listaPalabras con un calloc()

forma correcta de inicializarlo:
for(i=0;i<longListaPalabras;i++) { listaPalabras[i]=(char*)calloc(100,1); }

muchas gracias a todos por la ayuda!
#14
Programación C/C++ / Re: Problemas con printf();
20 Octubre 2015, 00:22 AM
Gracias por la ayuda, pero no me funciona...incluso lo del strcpy...

probe a sustituir:
CitarlistaPalabras[posListaPalabras]=palabra;
por esto:
Citarstrncpy(listaPalabras[posListaPalabras],palabra,strlen(palabra));

Y esto compila de maravilla pero cuando ejecuto el programa me da fallo de segmentacion...

listaPalabras la tengo declarada asi: char* listaPalabras[1000000];
y palabra la tengo declarada asi: char palabra[100]="";

He probado a inicializar listaPalabras con un bucle: for(i=0;i<longListaPalabras;i++) { listaPalabras[i]=""; }  y compila pero tampoco funciona....

no se porque strncpy() me da fallo de segmentacion...¿Alguna idea?
#15
Programación C/C++ / Problemas con printf();
19 Octubre 2015, 04:36 AM
¡Buenas a todos!

Estoy haciendo un pequeño "compilador". Lo que debe hacer es traducir de mi lenguaje a lenguaje C para linux. El caso es que al cargar las palabras en un arrayList de char* lo carga bien dentro de la funcion cargaListaPalabras(codigoTraductor,listaPalabras); e imprime correctamente las palabras de listaPalabras, pero cuando  intento imprimir las palabras de listaPalabras fuera de cargaListaPalabras(); no imprime nada....

Este es el codigo de cargaListaPalabras que funciona correctamente:

void cargaListaPalabras(char* codigo,char* listaPalabras[]){
 
 char palabra[100]="";
 int posPalab=0;
 int posCodigo=0;
 int posListaPalabras=0;
 
 
 printf("codigo: %s\n",codigo);
 
 while(posCodigo<strlen(codigo)){
   while( ((esLetra(codigo[posCodigo])>0) || (esNumero(codigo[posCodigo])>0)) && (codigo[posCodigo]!='\0')){
     //lee letras y numeros hasta formar una palabra
     palabra[posPalab]=codigo[posCodigo];
     posPalab++;
     posCodigo++;
   }
   palabra[posPalab]='\0';                                    //finaliza la palabra
   listaPalabras[posListaPalabras]=palabra;        //guarda palabra en listaPalabra
   printf("%s\n",listaPalabras[posListaPalabras]);   //imprime bien
   posListaPalabras++;
   posPalab=0;
     
   while( (esLetra(codigo[posCodigo])==0) && (codigo[posCodigo]!='\0') ){
     //lee caracteres (comillas, puntos, coma) para guardarlos como una palabra individualmente
     palabra[posPalab]=codigo[posCodigo];
     palabra[posPalab+1]='\0';
     posCodigo++;
     posPalab=0;
     listaPalabras[posListaPalabras]=palabra;   //guarda el caracter en listaPalabras
     printf("%s\n",listaPalabras[posListaPalabras]);   //imprime bien
     posListaPalabras++;
   }

 }
 listaPalabras[posListaPalabras]="@fin@";  //palabra de fin de codigo.
 printf("%s\n",listaPalabras[posListaPalabras]);   //imprime bien
}


Los printf() de la funcion anterior imprimen el codigo correctamente. Pero cuando en la funcion main() escribo lo siguiente y no funciona el printf() y saca un salto de linea por palabra...


  char* listaPalabras[1000000];
  int posListaPalabras=0;  

 cargaListaPalabras(codigoTraductor,listaPalabras);
 
 while(strcmp(listaPalabras[posListaPalabras],"@fin@")!=0){
   
   printf("%s\n",listaPalabras[posListaPalabras]);   //imprime mal....
   posListaPalabras++;
   
 }


¿porque el printf() del bucle while() no me imprime lo mismo que los printf() de la funcion cargaListaPalabras()?

Gracias por las respuestas.
#16
Programación C/C++ / return array char en C
29 Septiembre 2015, 02:58 AM
Buenas a todos!

Tengo problemas para declarar una funcion que retorna un array de caracters.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const int maxCharPalab=100;
typedef char palabra[maxCharPalab];

const int maxCharInstruc=1000;
typedef char instruccion[maxCharInstruc];

palabra leePalabras(instruccion instruc){

     palabra palab;

    //codigo...

    retrurn palab;

}



¿como debo declarar la funcion para que funcione correctamente con arrays?


Gracias, un saludo.
#17
Buenas a.9471!

No he compilado tu codigo...pero a primera vista creo que si pide los 6 datos pero no ha 5 personas porque la void capturar() no esta dentro de un bucle para que se ejecute 5 veces.

Tambien veo que no usas bien los if() else()...

si pones:
if(condicion1) instruccion1;
else instruccion2;
instruccion3;


se ejecutaran instrcion1 y 3 o instrucion  2 y 3

te lo digo por estas lineas:
Citarint buscar(int x)
{
    int nl,b=0,pos;                                      
    if(x==4)  p("\n Dame el Numero de lista a eliminar:");                                                                                                                                                                                                  
    else if(x==5)
               p("Introduce el numero de lista a modificar:");                                                                                                                                                                                            
    else
         p("introduce el numero de lista a buscar:");
     s("%d",&nl);


Esta linea se ejecuta
Citars("%d",&nl);
aunque no deberia ejecutarse si no entra en el else;

Para ello usa los corchetes:

if(condicion1){
    instruccion11;
    instruccion12;
}
else if(condicion2){
    instruccion21;
    instruccion22;
}
else{
    instruccion31;
    instruccion32;
}


Y para hacer tu programa mas legible alinea correctamente las funciones() y los void()
Tal y como lo tienes escrito todos las funciones() y los void() deberian estar alineados a la izquierda ya que no tienes funciones dentro de funciones

Utiliza este estilo (de corchetes)que hace mas facil la lectura.

void 1(){

    //codigo....
    //codigo....
    //codigo....
}

void 2(){

    //codigo....
    //codigo....
    //codigo....

    if(condicion){
           //codigo....
           //codigo....
    }
    else{
           //codigo....
           //codigo....

    }
}


Es una buena practica de programacion para facilitar la lectura
#18
Programación C/C++ / Http gzip encoding
19 Septiembre 2013, 17:34 PM
¡Buenas a todos!

Estoy haciendo un pequeño navegador web y tengo problemas con los datos codificados con gzip.
Me gustaria saber si hay alguna libreria en C para linux para decodifcar los datos HTTP con codificacion gzip. En caso de que no hubiera libreria...donde puedo encontrar la especificacion para programar manualmente el algoritmo de decodificacion?

Por ahora en internet solo he encontrado info sobre compresion y descompresion con gzip....y creo que no es lo que busco aun que tenga el mismo  nombre....

Alguien sabe como decodificar los HTTP que tienen Content-Encoding: gzip  ??

Gracias un saludo.
#19
Redes / Re: Reensamblado TCP
11 Junio 2013, 20:39 PM
Bueno, sigo sin dar con la respuesta....asi que voy a reformular mi pregunta a ver si alguien me puede ayudar mejor.

Tengo una aplicacion que recibe 10 segmentos TCP y se de antemano que los 10 segmentos forman parte de 2 paquetes enviados por una aplicacion. ¿como puedo saber que segmentos son del primer paquete y que segmentos son del 2º paquete? porque podrian ser los 4 primeros segmentos  para el primer paquete y los 6 siguientes para el segundo...ó....podrian ser los 7 primeros segmentos para el primer paquete y los 3 ultimos para el segundo....

¿alguna idea sobre como tcp identifica un segmento para hacer el reensamblado?
#20
Redes / Reensamblado TCP
10 Junio 2013, 23:39 PM
¡Buenas a todos!

Tengo una dudilla....

Estoy haciendo un programa que usa raw socket, y estoy recibiendo paquetes TCP por el socket y necesito saber cuando debo reemblar un segmento y cuando no. Mi pregunta es...¿Que campo de la cabecera me proporciona dicha informacion?

Estoy usando wireshark para capturar datos de una conexion cualquiera y no por mas que miro las cabeceras TCP no veo nada que me diga que un paquete esta completo o si es un segmento de un paquete mas grande....Lo que si veo es que todos los segmentos llevan el flag ACK a 1 y luego llevan datos y que cuando llega el ultimo segmento lleva el flag ACK a 1 el PUSH a 1 y datos tambien.

¿Debo entender que todo paquete TCP con el flag ACK a 1 y que lleva datos es un segmento?

¿alguna idea sobre el tema?

Gracias, un saludo