append , . a un string existente

Iniciado por bash, 5 Junio 2015, 17:56 PM

0 Miembros y 1 Visitante están viendo este tema.

bash

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
gracias por responder mis dudas

rir3760

Cita de: bash en  5 Junio 2015, 17:56 PMtengo 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):
char *szTemp1 = NULL; /* 1 */

/* ... */

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:
char *addComma(char const *str)
{
   size_t i;
   char *p;
   char *q;
   
   i = strlen(str);
   p = q = malloc(i + (i - 1) / 3 + 4);
   
   while (1){
      *q++ = *str++;
     
      if (--i == 0)
         break;
      else if (i % 3 == 0)
         *q++ = ',';
   }
   strcpy(q, ".00");
   
   return p;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language