C/Visual C - SOS

 
Vista:

SOS

Publicado por A (3 intervenciones) el 29/02/2016 13:03:54
Hola, escribo porque necesito ayuda en este programa. Este programa concatena s2 en s1, de tal modo que s1
quedaría modificado. Por ejemplo: mi_strcat("Hola ","mundo"), el resultado sería "Hola mundo", y "Hola", pasaría a ser ese resultado. No sé por qué pero en las pruebas, tras ejecutar la función s1 no modifica su estado, el resultado lo da correcto, pero al igualar s1 y el resultado falla. Pd: mi_strlen calcula el nº de caracteres de la cadena( versión propia de strlen).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
char* mi_strcat(char* s1,char*s2){
  char* aux;
  int i;
  int y;
  int s2len=mi_strlen(s2);
  int s1len=mi_strlen(s1);
  aux= (char*)malloc((s1len+s2len)* sizeof(char*));
  if(aux){
   for(i=0;i<s1len;i++){
    *(aux+i)=*(s1+i);
 
    }
 
    for(y=0;y<s2len;y++){
      *(aux+y+s1len)=*(s2+y);
 
    }
    s1=aux;
    //Otra forma??
    // for(y=0;y<mi_strlen(aux);y++){
 
    // *(s1+y)=*(aux+y);
    // }
  }
 
  return s1;
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

SOS

Publicado por Tom (619 intervenciones) el 29/02/2016 18:19:32
Pues no es nada bueno que no sepas por qué s1 "no modifica su estado" ...
Deberías saberlo ya, pero s1 es una variable local a la rutina mi_strcat (es una variable "en el stack"). O sea, si la modificas será solamente de forma local.
Lo que tú crees que puedes hacer es algo parecido a esto (no veo con qué objeto, pero bueno):

char* mi_strcat(char **s1, char *s2) {
...
...
*s1 = (char*)realloc(*s1, strlen(blah ... blah));
...
strcat(*s1, s2);
return *s1;
}

Y por Dios !!! no te empeñes en usar el sizeof(char*) en el cálculo del nuevo tamaño (ya lo viste en tu anterior post ¿no?).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar