1
resposta

Estou dando o printf em um array de 2 posições na terceira esta aparecendo um smile saberia me dizer o porquê?

No código a seguir eu faço um printf em um array de duas posições mas apareceuma terceira com um smile. Saberia me dizer o porquê? A variavel tem apenas 2 posições. Anexo o print da tela do command com o smile.

#include <stdio.h>

void potencia(char texto[2], int* numero) { texto[0] = 'C'; texto[1] = 'D';

(*numero)++;

printf("letra dentro da funcao %s \n", texto);
printf("numero dentro da funcao %d \n", *numero);

}

int main() {

int numero = 1;
char texto[2];

texto[0] = 'A';
texto[1] = 'B';

printf("letra antes da funcao: %s \n", texto);
printf("numero antes da funcao: %d \n", numero);

// o & utiliza com ponteiros, na funcao o ponteiro vem com * na frente
potencia(texto, &numero);

printf("letra depois da funcao %s \n", texto);
printf("numero depois da funcao %d \n", numero);

}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

O que está acontecendo é que vc não determinou o final da sua String e o printf está pegando lixo da memória ate encontrar um ponto de parada(\0)

Basicamente, quando você declarar um array para uma string, deve levar em conta que essa string deve terminar em \0(barra zero).

Exemplo: Para uma string com 2 caracteres, vc deve declarar um array com 3 posicões, sendo o valor do indice 2 = '\0'

char texto[3];

texto[0] = 'A'; texto[1] = 'B'; texto[2] = '\0';

Ou faz um memset no array e para ele ser inicializado todo com zero memset( texto, 0, sizeof(texto));