Dúvida de iniciante sobre uma variável [RESOLVIDO]

1. Dúvida de iniciante sobre uma variável [RESOLVIDO]

Nick Us
Nick-us

(usa Slackware)

Enviado em 23/02/2019 - 11:14h

Bom Sábado a todos! Quem souber ajudar, ficarei agradecido.
Uso Linux, programo no Editor Atom (Tipo Bloco de Notas básico) e compilo pelo gcc. Uso o Eclipse apenas para entender melhor o armazenamento das variáveis.

Estou com dificuldades pra entender a seguinte situação sobre variavel. Vamos apenas analisar uma variável do tipo char.
char Texto[10] = "Linux"; // Linux ocupa 5 Caracteres + Terminador \0 ou seja eu gasto 6 caracteres aqui! 

O GDB informa assim:
$1 = "Linux\000\000\000\000"

O Eclipse informa assim:
Texto[0] char 76 'L'
Texto[1] char 105 'i'
Texto[2] char 110 'n'
Texto[3] char 117 'u'
Texto[4] char 120 'x'
Texto[5] char 0 '\0'
Texto[6] char 0 '\0'
Texto[7] char 0 '\0'
Texto[8] char 0 '\0'
Texto[9] char 0 '\0'

Quero saber o que de verdade é armazenado.
L ou 76
0 ou \0 ou \000

Sei que \0 é o Terminador da String. Mas ele é 0 ou /0 ?
Sei que 76 é a referência decimal do L na tabela ASCII. Porém 0 é 48 e Nulo seria 00. Logo essa referência a tabela também não parece lógica.

Fico confuso porque realmente não sei o que de verdade está escrito e guardado! Pensei? Será que é guardado outra coisa? Em binário? Hexadecimal?
Alguém pode ajudar?

OBS: Não tenho um professor porque não posso pagar, logo não tenho a quem perguntar! Estou estudando por conta própria, me restando apenas a Internet e Fórums.


  


2. MELHOR RESPOSTA

Fernando A. Vita
fernandoavita

(usa Debian)

Enviado em 23/02/2019 - 18:37h

Tanto o '\0', como também o '\n' e o '\t' são representações adotadas em C para caracteres não imprimíveis, ou seja, uma representação visual para ajudar o programador no momento de programar.

Em ASCII o inteiro 0 representa o caracter '\0',
o inteiro 9 representa o caracter '\t'
o Inteiro 10 ou 0xA representa o caractere '\n'. No windows o '\n' pode representar dois caracteres em vez de um.

Quanto ao que é armazenado, em computador tudo é binário. Se eu quiser armazenar uma cor, tem alguma lógica que traduz aquilo para binário. Se eu quiser armazenar uma música, há alguma lógica que traduz aquela música para binário. No caso de um caractere temos uma tabela que faz essa conversão que serve de referência para esta conversão (tabela ASCII). Deste modo, o que é armazenado é sempre um valor binário.

segue um outro teste para tentar te ajudar a entender melhor esses caracteres não imprimíveis

#include <stdio.h>

int main(){
int i=0;
char texto[10] = "Linux\t\n";
char numeros[15] = "0123456789";

puts(texto);
for (i=0 ; i < 10 ; i++){
printf("char: %c\t decimal: %d\t hexadecimal: %x\n", texto[i], texto[i], texto[i]);
}

puts(numeros);
for (i=0 ; i < 15 ; i++){
printf("char: %c\t decimal: %d\t hexadecimal: %x\n", numeros[i], numeros[i], texto[i]);
}

printf("char \\0-> %d\n", '\0');
printf("char \\t-> %d\n", '\t');

return 0;
}


3. Re: Dúvida de iniciante sobre uma variável [RESOLVIDO]

Nick Us
Nick-us

(usa Slackware)

Enviado em 23/02/2019 - 19:05h

fernandoavita escreveu:segue um outro teste para tentar te ajudar a entender melhor esses caracteres não imprimíveis

Obrigado pelo exemplo, gostei dessa conversão imediata no printf. Eu já havia visto isso pois li sobre isso, mas passou despercebido a conversão!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts