Como a função do MEMSET é usada

Como a função do MEMSET é usada

Em C, a função MEMSET () é usada para definir um valor de um byte em um byte de bloco de memória por byte. Esta função é útil para a inicialização de um byte de bloco de memória por byte por um valor específico. Neste artigo, veremos em detalhes como essa função pode ser usada. Então vamos começar.

Arquivo de cabeçalho:

corda.h

Sintaxe:

void *MEMSET (void *str, int ch, size_t n)

Esta função define o primeiro n bytes do bloco de memória apontados por str por CH.

Argumentos:

A função leva 3 argumentos:

  1. str: Este é o ponteiro do local da memória onde a memória será definida. Este é um ponteiro vazio, para que possamos definir qualquer tipo de bloco de memória, mas a memória será definida por byte byte.
  2. CH: Este é o valor que deve ser copiado para o bloco de memória. Este é um valor inteiro, mas é convertido para um caráter não assinado antes de copiar.
  3. n: Este é o número de bytes no bloco de memória que é definido.

Valores de retorno:

MEMSET () Retorna o primeiro endereço do bloco de memória de onde ele começa a definir o valor.

Exemplos:

//Exemplo 1.c
#incluir
#incluir
int main ()

char str [30] = "ABCD EFGH";
printf ("Antes de MEMSET => %S", STR);
MEMSET (STR, 'X', 3);
printf ("\ Nafter memset => %s \ n", str);
retornar 0;


No exemplo1.C, declaramos uma matriz de caracteres do tamanho 30. Então nós inicializamos com a string “ABCD EFGH.”Na função de Memset, passamos 3 argumentos str, 'x' e 3. Portanto, o bloco de memória apontado pelo STR será redefinido os 3 primeiros caracteres por 'x.'Depois de Memset, quando imprimirmos a memória, teremos “xxxd efgh.”

// Exemplo2.c
#incluir
#incluir
int main ()

char str [30] = "ABCD EFGH";
printf ("Antes de MEMSET => %S", STR);
MEMSET (STR+4, 'X', 3);
printf ("\ Nafter memset => %s \ n", str);
retornar 0;


No exemplo2.C, passamos a função STR+4 para MEMSET. Então, redefinir a memória após a 4ª localização do STR. Depois de Memset, quando imprimirmos a memória, obteremos “abcdxxxgh.”

// Exemplo3.c
#incluir
#incluir
int main ()

int arr [5], i;
MEMSET (ARR, 10,5*sizeof (arr [0]));
printf ("\ narr elements => \ n");
para (i = 0; i<5;i++)
printf ("%d \ t", arr [i]);
printf ("\ n");
retornar 0;


No exemplo3.C, declaramos uma matriz inteira do tamanho 5 e tentando inicializá -lo por 10. Mas, a partir da saída, vimos que a matriz não é inicializada por 10; Em vez disso, temos o valor "168430090". Isso ocorre porque o valor inteiro é maior que um byte e a função MEMSET converte o valor em um personagem não assinado antes de copiar. Agora, veremos como obteremos o valor “168430090”.


A representação binária de 10 é 00000000 00000000 00000000 00001010.

Quando o número inteiro convertido em char não assinado, o 1 byte inferior é considerado. Portanto, quando 10 é convertido em char não assinado, é uma representação binária 00001010.

Função MEMSET () define o byte de localização da memória por byte. Portanto, um total de 4 bytes será: 00001010 00001010 00001010 00001010.

O valor decimal da representação binária de 4 bytes é 168430090.

// Exemplo4.c
#incluir
#incluir
int main ()

int arr [5], i;
Memset (arr, 0,5*sizeof (arr [0]));
printf ("\ narr elements => \ n");
para (i = 0; i<5;i++)
printf ("%d \ t", arr [i]);
printf ("\ n");
retornar 0;


No exemplo4.C, inicializamos a matriz inteira por 0. Todos os bits da representação binária de 0 é 0. Então a matriz é inicializada por 0.

// Exemplo5.c
#incluir
#incluir
int main ()

int arr [5], i;
MEMSET (ARR, -1,5*sizeof (arr [0]));
printf ("\ narr elements => \ n");
para (i = 0; i<5;i++)
printf ("%d \ t", arr [i]);
printf ("\ n");
retornar 0;


No exemplo5.C, inicializamos a matriz inteira por 0. Todos os bits da representação binária de -1 é 1. Então a matriz é inicializada por -1.

Conclusão:

Neste artigo, vimos usando a função do MEMSET como podemos inicializar ou definir o valor de um bloco de memória com eficiência. Podemos definir qualquer caractere e 0 ou -1 como um valor inteiro para um bloco de memória. A função MEMSET é mais rápida para definir um grande pedaço de memória contígua em comparação com simplesmente definir o local usando um loop.