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

#51
Programación C/C++ / Re: Duda sobre do while
6 Junio 2015, 16:05 PM
primero que todo usa GESHI  para que se vea mejor el codigo y se mas legible
segundo trata de inicializar las variables antes de usarlas ,
#52
Buenas a todos en mi afan de aprender me he topado con lo siguiente
tengo cantidades monetarias en string y quiero agregarles en su debido lugar un caracter espeficio como son comas y puntos pero no me explota el programa cuando lo corro
pior que seria eso ?

abajo dejo parte del codigo ,gracias por los consejos.
Código (cpp) [Seleccionar]
char *addComma(char *szValue){
   char *szReturn =  NULL;
   char *szTemp1  =  NULL;
   char *szTemp2  =  NULL;
    int inLength = strlen(szValue);
   
   /*
    *  10000.00 -->> 10,000.00
    *  9000.00  -->>  9,000.00
    *
    *
    *
    * */
   
   
   
   if(inLength >= 6 ){
switch(inLength){
case 7:
strncpy(szTemp1,szValue, 2 );
strncat(szTemp1, ",", 1);
strncat(szTemp1, szValue+3,3);
strncpy(szTemp1, ".", 1);

break;
case 5:


   }
 
   return szTemp1;
}



solo importa la parte que hago strncat , strncpy
#53
Buenas a tdos tngo un pequeno string  y quisiera copiar parte de el a otro string se donde estan las posiciones pero con memcpy y memmove ni van bien o lo estoy haciendo mal alguien me podria dar un pequeno consejo por favor? gracias de antemano.
#54
   lseek(data1, 1, SEEK_CUR);
       lectura = read(data1,buffer, 1);
       if(lectura == -1 || lectura == 0){
          sp_debug(("o se llego al final del fichero o hay un error de lectura"));
       }else sp_debug(("cantidad de bytes leidos en la lectura es : %d", lectura));
        strncat(&bufferEscritura, &buffer[indice], 1);
        indice++;
         esc = write(data2, &bufferEscritura, 1);
         sp_debug(("bytes Escritos"));
         lseek(data2, 1, SEEK_CUR);
    }
#55
hola a todos !!
Disculpen a este novato que tiene este foro a mil con tatnas preguntas pero de verdad me interesa aprender
y gracias a ustedes lo estoy logrando , bueno ahora lo que quiero es partsear un xml  ose eleminar un tag en algun sitio dentro del documento. yo se que me haran un pregunta , despues de ver el codigo , estoy en un entorno donde solo tengo open, write ,read y close de unix  el programa compila pero me da segmentation fault (core dumped ) , me pasa muy a menudo pero esta vez cuando trato de leer la cantidad de bytes con read que deberia. bueno pongo el codigo a ver si me doy a entender.
este seria el xml
Código (xml) [Seleccionar]
<xml>
<tag>
 m texyo de be ser
ffgfgf
fgfhfhfh
hf hhf hf hf hfh
gh hghg gh ghghg
gh ghgh
</tag>
</xml>



luego el codigo en c
#include <fcntl.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc ,char argv[])
{
  int bucle =0;
  char *pbuffer={'\0'};
  int file = open("s.xml", O_RDONLY);
  if(file < 0){
     printf("Error Abriendo el fichero \n");
     exit(1);///salida de error
   }else{

    pbuffer = NULL;
    int r = read(file, 1024);
    printf("cantidad de bytes leidos :\n %d", r);
    close(file);  
    char *sin= strstr(pbuffer, "<tag>");
    pbuffer = NULL;
    while(sin[5+bucle] != '<')
    {
      strncat(pbuffer, &sin[5+bucle],1);
       bucle++;
    }  
   
    int s2 = open("copia.xml", O_WRONLY|O_TRUNC);
    if(s2 < 0){
      printf("Error @");
     int d=  write(sin, 1024);
     printf("cantidad de bytes escritos : %d", d);
     close(s2);
    }
   }///else??
 

}



segun la documentacion de unix ,cuando trate de leer o escribir tantos n-bytes en el o desde el buffer y tengas disponible menos eso es lo que te devolvera o me equivoco ?
gracias de anteamano. igual quisiera leer una estructura completa pero esta fuera del scope ahora me preocupa ese error.
#56
Buenas a todos !!!
tengo una duda teorica estoy recibiendo un buffer que tienes mas 11000 caracteres
pero el maximo de buffer que puedo leer es de 8000 caracteres o valores y me gustaria saber que manera es eficiente y efectiva para poder recibir ese buffer ? solo es teoria  si le sale algo practico esta bien pero me guistaria entender esto !!

modificado:

#include<fcntl,h>

char buffer[1024];

int main()
{
    int fd = open("buffe.cier", O_WRONLY);
  if(fd < 0)
  {
      ///error    
   }else{

    ////aqui la verdad no me llega como llenar el buffer
   //// pense usar un while o un for para ir leyendo
   //// pero es un sistema empotrado
    ////intente leer 1024 a 1024
    ////2048 a 2018
    ///// y tambien el buffer completo
   /// 11700 pero nada
   ///////opiniones!!! please

   }



 return 0;
}


Gracias por adelatado

Mod: Obligatorio el uso de etiquetas GeSHi
#57
claro q si
#58
use malloc pero al final me dio lo mismo estoy leyendo para instruirme a ver si algo sale , posterare resultados. gracias !!
#59
si te entiendo pero existe una forma de copiar el token en otra cadena

use strcpy , memcpy ... y el resultado fue el mismo . pienso que es por q al final strtok devuelve el ultimo token como nulo pero tambien el hize una comparacion y nada.
dime si me equivoco , tambien estoy tratando con algo como lo siguiente que si copa pero
al final salen caracteres que no  estan en la cadena , por que pasa eso ?
mira el codigo :


Código (cpp) [Seleccionar]
char datos[] ="SOLOESTO..0000000000000000000     0000000   000000000     0000.0  00000-00-10011:00:00 ";

int main(){
  char *b;
  b =(char*)malloc(1000);
  for(int i= 0; i < strlen(datos); i++)
    if( i < 10)
       strncat(b, &datos[i],1);

    cout<<b;
    free(b);


}



Modicado
Código (cpp) [Seleccionar]
while( (ptr = strtok( NULL, s2 )) != NULL )    // Posteriores llamadas
    strncat(s, ptr,20);

esto si funciona aunque aun me manda caracteres raros , por que  ?

Gracias !!
#60
ya arregle la condicion OntheCore !!


Stakewinner00: le puse & por la declaracion dentro del header mira lo que dice
Código (cpp) [Seleccionar]
_CRTIMP char* __cdecl __MINGW_NOTHROW strncat (char*, const char*, size_t);

a parte le hize un cambio

al codigo
Código (cpp) [Seleccionar]


#include <iostream>
#include <cstring>
#include <cstdlib.h>
using namespace std;


struct Campos {
 char campo1[10];//10
 char campo2[16];
 char campo3[7];
 char campo4[8];
 char campo5[6];
 char campo6[21];


};

char datos[] ="SOLOESTO..0000000000000000000     0000000   000000000     0000.0  00000-00-10011:00:00 ";

int main(){
  Campos cmp1;
  memset(&cmp1, 0x00, sizeof(Campos));
  char token2[2000];
 char *token = strtok(datos , " ");
 while(token != NULL)
 {
    cout << " "<<endl<< token;
   
/////AQUI
    strcat(token2, token );
     token=strtok(NULL, " ");
     strcat(token2, token );
//// AQUI ....

 }

 cout <<token2;


cout<< " token : \n"<<token<<endl;
  cout << "\niteraciones ----------------------------------------";
 for(int iteraciones= 0;  iteraciones < 11; iteraciones++)
 {

   if(iteraciones < 11)
   {
     strncat(cmp1.campo1,token[iteraciones], 1);////en esta iteracion solo quiero copiar                   un caracter
     cout << cmp1.campo1;
   }



 }

}


Me asegure de darle 2000 campos para ver si no falla pero falla como quiera.