O ponteiro de string aponta o processador para o primeiro elemento (endereço de memória) de um vetor para que ele leia os dados até que encontre um byte nulo (NULL, 0, '\0). Portanto, certifique-se de que a variável de destino possua espaço suficiente para receber o dado.
char *ditado = "O rato roeu a roupa\0 do rei de roma"; // output: O rato roeu a roupa
char ditado[10] = "O rato roeu a roupa do rei de roma"; // output: O rato roe
Ao declarar uma variável, verifique se ela foi atribuída com um valor inicial. Isso previne que a variável seja valorada com lixo de memória.
int tamanho = 0;
char nome[25] = "";
Cuidado ao gravar dados em pointeiro. Certifique-se de que a variável de destino possui espaço suficiente para armazenar os valores e não invadir espaço de memória. Para isso utilize funções que consideram o tamanho da variável como snprintf(), strncat(), e snprintf().
char nome_completo[30] = "";
char *nome = "Adriane";
char *sobrenome = "Galisteu";
snprintf(nome_completo, sizeof(nome_completo), "%s %s", nome, sobrenome);
Ao definir o tamanho de bytes de uma variável, certifique-se de que tenha deixado uma margem a mais sobrando, para caso ocorra alguma mudança que a regra de negócio precise atualizar. Um exemplo é a quantidade de dígitos dos números de celular que até 2012 possuiam apenas 8 dígitos, e pode variar dependendo do contexto.
char celular[20] = "9804-2245";
char celular[20] = "+55 (51) 9804-2245";
Caso tenha utilizado alguma função de alocação dinâmica, certifique-se de que tenha liberado o espaço reservado quando a variável já não for mais utilizada. e evitar vazamento de memória.
int *ptr;
ptr = (int *)malloc(sizeof(ptr)); //aloca
if (ptr == NULL)
{
printf("ERROR: could not be allocated: memory overflow\n");
return 1;
}
*ptr = 10;
printf("%d\n", *ptr);
free(ptr) //dealoca
Cuidado ao gravar dados em variáveis via paramêtro. Para proteção, o correto é ter também na entrada da função o tamanho da variável onde o dado será gravado.
void converte_em_reais(char *valor_produto, char *buf, int buf_len){
snprintf(buf, buf_len, "R$ %s", valor_produto);
}
int main()
{
char *valor_produto = "29,90";
char valor_reais[10] = "";
converte_em_reais(valor_produto, valor_reais, sizeof(valor_reais));
printf("%s", valor_reais);
return 0;
}