Busca la funcion que necesitas!

domingo, 16 de enero de 2011

C - Limpiar cadena o bloque de memoria para evitar caracteres raros

Bueno en esta ocasión les diré cómo podemos limpiar un bloque de memoria o una cadena con un determinado espacio reservado, bueno les comparto la idea porque en otro momento estaba hasta la madre(como todo programador casero ha estado alguna vez) porque no podía solucionar un error y el problema era por el bloque de memoria sucio hasta que se me ocurrio limpiarlo bueno:

Para limpiar un buffer con determinado espacio:
char buffer[260]={'\0'};
Listo nos ha quedado limpio porque { } rellenan el contenido de nuestro buffer con lo que hay entre comillas simples (se usan comillas simples por que estamos usando un solo caracter, en esta ocasión el caracter nulo representado por \0

Ahora para limpiar un buffer de memoria lo que hacemos es usar memset() así:

char *szBuffer; //puntero buffer
szBuffer=(char *)malloc(6); // reservamos un bloque de memoria de tamaño 6
memset(szBuffer,0,6);
//limpiamos los 6 bytes de memoria rellenando con 0
Listo nuestro buffer o bloque de memoria esta limpio como para despues agregarle cadenas de texto y demás cosas!, ahora les dejo un ejemplo implementando la limpieza de memoria con una función Left de visual basic que ya había programado y posteado yo acá

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//->prototipo
char * Left(char *sCadena,int iPosicion);
//->uso
int main()
{
  printf("%s",Left("funcion-linkgl.blogspot.com",6));
  getchar();
  return 0;
}
//->funcion
char * Left(char *sCadena,int iPosicion)
{
  int i;
  char *sNueva=malloc(strlen(sCadena));
  memset(sNueva,0,strlen(sCadena));
  for(i=0;i<iPosicion;i++)
    sNueva[strlen(sNueva)]=sCadena[i];
  return sNueva;
}//compilado con mingw dev cpp

Espero a alguno de ustedes le haya servido la forma para limpiar una cadena o bloque de memoria con C usando memset y caracteres nulos, nos vemos en la siguiente entrada

No hay comentarios:

Publicar un comentario