Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Alano

[Resolvido] Char - C

Recommended Posts

Olá, sou novato em C e estou seguindo alguns tutoriais e apostilas. Ao tentar criar um simples código, obtive meus primeiros erro na linguagem.

 

Código:


#include <stdio.h>

int main() {
	char nomeCompleto = "Bruno Alano";
	printf("%c", nomeCompleto);
}

 

Erro:

 

Aula1.c: In function 'main':

Aula1.c:4: warning: initialization makes integer from pointer without a cast

 

 

Percebo no alerta, que ele fala que ao fazer um integer (número) pelo ponteiro, dá alguma coisa. Então tentei utilizar:

char *nomeCompleto = "Bruno Alano";

 

Porém o erro continua...

 

 

Grato, Bruno Alano.

 

Levando em conta o fato de você ser iniciante, aconselho fortemente a esquecer esse assunto no momento.

Se concentre em aprender a programar e habitue-se com a sintaxe do C, com o tempo você se acostuma com essas coisinhas.

 

Mas, o seguinte código funcionará:

#include <stdio.h>

int main()
{
char nomeCompleto[] = "Bruno Alano";
        printf("%s", nomeCompleto);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não há nada de errado com o seguinte:

 

char *nomeCompleto = "Bruno Alano";

Na verdade, nomeCompleto[] e *nomeCompleto são a mesma coisa. O erro está em

 

printf("%c", nomeCompleto);

Quando você passa o modificador "%c" pra printf(), ela espera que, após a string a ser interpolada (no seu caso, só "%c"), seja passado como argumento uma variável de tipo char. O problema é que

 

char *nomeCompleto;

Denota um ponteiro para char. São duas coisas diferentes, e de tamanhos diferentes. Se você quiser imprimir a string "Bruno Alano", deve fazer:

 

 

//...
char *nomeCompleto = "Bruno Alano";
        printf("%s", nomeCompleto);

Quando a printf() encontra um "%s", espera, agora sim, um ponteiro para char, e lê este endereço de memória (que contém um char) e os próximos, até que o caracter lido tenha valor binário 0 (convenção que indica tanto "fim de array de caracteres" como "nulo", em C). Quando você faz

 

char *nomeCompleto = "Bruno Alano";

seu compilador aloca espaço estaticamente para uma array de tamanho 12, inserindo letra a letra em ordem em cada posição de memória alocada (sequencialmente), e por último, na posição 11 (começa a contar do 0), insere o 0 (nullbyte, a nossa convenção).

 

Pra acessar um único caracter, você pode usar a sintaxe

 

nomedoponteiro[indice];

onde "nomedoponteiro" é, justamente, o nome do ponteiro fornecido na declaração, e o índice, um número inteiro. O nome do ponteiro é um identificador para o qual o C olha, que contém o endereço de memória inicial da sua array. O índice é o offset (deslocamento) que se deseja acessar. Então o endereço de memória acessado quando se faz

 

nomedoponteiro[indice]

é sempre igual a (endereço apontado por nomedoponteiro) + (indice) * sizeof(nomedoponteiro *). Quando usamos esta notação, então, estamos nos referindo ao valor apontado pelo endereço "nomedoponteiro[indice]". Ou seja,

 

nomeCompleto[0] == 'B';

De fato, fazer

 

 printf("%c", nomeCompleto[0]);

imprimirá 'B'. nomeCompleto[1], no seu programa, é igual a 'r', e assim por diante. Aqui segue a tabela de expressões verdadeiras pra sua array:

 

nomeCompleto[0] == 'B';
nomeCompleto[1] == 'r'; 
nomeCompleto[2] == 'u';
nomeCompleto[3] == 'n';
nomeCompleto[4] == 'o';
nomeCompleto[5] == ' ';
nomeCompleto[6] == 'A';
nomeCompleto[7] == 'l';
nomeCompleto[8] == 'a';
nomeCompleto[9] == 'n';
nomeCompleto[10] == 'o';
nomeCompleto[11] == '0';        // denota o fim da string

 

espero ter ajudado. Seria bom você procurar documentação sobre arrays de caracteres em C.

Compartilhar este post


Link para o post
Compartilhar em outros sites

VictorCacciari

Muito obrigado pela sua ajuda, e estou aprendendo isso pois conheço programação. Atulamente programo em: Python, Ruby, Perl, Java SE e Visual Basic 6. Além das básicas, como: PHP, Javascript.

 

guidjos Imagem Postada

Muito obrigado à você também, pela explicação do que acontece e como funciona. Isso me ajudou muito mesmo.

 

 

Grato a todos por estarem lendo este tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.