Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: bash en 5 Junio 2015, 17:56 pm



Título: append , . a un string existente
Publicado por: bash en 5 Junio 2015, 17:56 pm
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
  1. char *addComma(char *szValue){
  2.   char *szReturn =  NULL;
  3.   char *szTemp1  =  NULL;
  4.   char *szTemp2  =  NULL;
  5.    int inLength = strlen(szValue);
  6.  
  7.   /*
  8.     *  10000.00 -->> 10,000.00
  9.     *  9000.00  -->>  9,000.00
  10.     *
  11.     *
  12.     *
  13.     * */
  14.  
  15.  
  16.  
  17.   if(inLength >= 6 ){
  18. switch(inLength){
  19. case 7:
  20. strncpy(szTemp1,szValue, 2 );
  21. strncat(szTemp1, ",", 1);
  22. strncat(szTemp1, szValue+3,3);
  23. strncpy(szTemp1, ".", 1);
  24.  
  25. break;
  26. case 5:
  27.  
  28. }  
  29.   }
  30.  
  31.   return szTemp1;
  32. }


solo importa la parte que hago strncat , strncpy


Título: Re: append , . a un string existente
Publicado por: rir3760 en 12 Junio 2015, 04:29 am
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 ?
El programa revienta porque no reservas memoria para la cadena resultante (1) y eso se manifiesta cuando tratas de escribir en NULL (2):
Código
  1. char *szTemp1 = NULL; /* 1 */
  2.  
  3. /* ... */
  4.  
  5. strncpy(szTemp1, szValue, 2); /* 2 */
Indicas que tratas de agregar comas Y puntos pero el fragmento de código sugiere que los puntos ya se agregaron, mejor aclara esa parte.

Si la cadena no contiene la parte decimal (".00" solo es ornato) una forma de agregarlos (sin validaciones y asumiendo la cadena de entrada contiene al menos un dígito) es:
Código
  1. char *addComma(char const *str)
  2. {
  3.   size_t i;
  4.   char *p;
  5.   char *q;
  6.  
  7.   i = strlen(str);
  8.   p = q = malloc(i + (i - 1) / 3 + 4);
  9.  
  10.   while (1){
  11.      *q++ = *str++;
  12.  
  13.      if (--i == 0)
  14.         break;
  15.      else if (i % 3 == 0)
  16.         *q++ = ',';
  17.   }
  18.   strcpy(q, ".00");
  19.  
  20.   return p;
  21. }

Un saludo