Lo usé en un problema que me dejaron resolver

Código: Seleccionar todo

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//StrReverse->
char *strrev(char *palabra)
{
  int largo,i,j;
  char *temp;
  largo=strlen(palabra);
  temp=(char *)malloc(largo);
  memset(temp,0,largo);
  for(i=largo-1,j=0;i>=0;i--,j++)
    temp[j]=palabra[i];
  return temp;
}
//->Uso
int main()
{
    printf(strrev("linkgl"));
    getchar();
    return 0;
}
//mHmm..
En tu función no agregas el caracter nulo al final de la cadena por lo que puede presentar fallas.

Corregido:

Código: Seleccionar todo

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//StrReverse->
char *strrev(char *palabra)
{
  int largo,i,j;
  char *temp;
  largo=strlen(palabra);
  temp=(char *)malloc(sizeof(char) * largo + 1);
  memset(temp,0,largo);
  for(i=largo-1,j=0;i>=0;i--,j++)
    temp[j]=palabra[i];
  temp[j] = '\0';
  return temp;
}
//->Uso
int main()
{
    printf(strrev("linkgl"));
    getchar();
    return 0;
}
Además en "string.h" existe una función llamada también strrev que hace lo mismo y tu usas el mismo nombre para tu función lo que puede dar algunos warnings.

Salud2
Gracias por tu corrección en realidad la función fué pensada para poder hacer un tipo "strrev" como el estandar que está en string.h PERO que funcione en binarios :P, por eso no agregué lo del caracter nulo Al publicarla aquí olvidé ese detalle y suprimí el parámetro de la longitud de la cadena por strlen para pasarlo de aplicarse a binarios a aplicarlo a cadenas sencillas pero se me fué el caracter nulo
//mHmm..
.::DoX::. escribió:
En tu función no agregas el caracter nulo al final de la cadena por lo que puede presentar fallas.
Imposible que ocurra, debido al memset() y que el algoritmo solo toca los caracteres nunca toca el ultimo (Solo menset lo toca).

Por otro lado:

* No hay nesesidad de usar memset... por logica se le van a setear a TODOS los valores.
* Personalmente prefiero que las funciones trabajen sin que ellas creen memoria (para eso mejor uso las clases).

Código: Seleccionar todo


char* reverse(char* szChars, size_t iSize) {
    size_t i = 0x0;
    if (iSize > 1 && szChars != NULL)
        for (;i < --iSize; i++) {
            szChars[i] ^= szChars[iSize];
            szChars[iSize] ^= szChars[i];
            szChars[i] ^= szChars[iSize];
        }
    return szChars;
}

inline char* strrev(char *szStr)
{
    return reverse(szStr, strlen(szStr));
}

int main(int argc, char * argv[])
{
    char szStr[] = "BlackZeroX";
    fprintf(stdout,"%s\n",strrev(szStr));
    return EXIT_SUCCESS;
}

Dulces Lunas1¡.
Web: http://infrangelux.sytes.net/
ScanX: http://ScanX.sytes.net/
FileX: http://FileX.sytes.net/
Blog: http://BlogX.sytes.net/

Imagen


The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi religion
Responder

Volver a “Fuentes”