Enviado em 08/01/2013 - 19:36h
Pessoal, estou (tentando) aprender C em casa, e para isso estou lendo uma apostila da UFMG.Enviado em 08/01/2013 - 20:45h
Ao declarar as variáveis dentro da função (arrays a e b, além de x), o programa abre memória para elas em tempo de execução dentro da pilha do programa. O conteúdo dessa memória é desconhecido a priori, e como você não define alguma coisa para ele explicitamente, esses valores indefinidos serão o que o seu programa vai usar quando você começa a copiar os valores de um lado para o outro, da maneira que fez. A única coisa à qual você atribui valor, que foi aos elementos do array a, você sobrescreve, dentro do loop, com um valor indefinido de x, e depois com valores indefindos dos elementos de b.Enviado em 08/01/2013 - 20:47h
Enviado em 09/01/2013 - 12:02h
Enviado em 09/01/2013 - 12:17h
Enviado em 09/01/2013 - 14:20h
repito: vc não definiu ( atribuir um valor ) a "string" ( b ) ... apenas fez a declaração.Enviado em 10/01/2013 - 01:13h
Vou reproduzir o seu código, enchendo-o de comentários, para você entender o que acontece.#include<stdio.h> int main () { /* Neste ponto, você acabou de entrar na função main(). Ainda não foi aberto espaço na memória para as suas variáveis. */ char a[10],b[10],x; int c; /* Neste ponto, o compilador já executou as instruções que reservam uma área para seus dois arrays e suas duas outras variáveis, mas ele apenas RESERVOU esse espaço, sem colocar coisa alguma dentro dele nem se preocupar com o que pudesse haver antes. */ printf("Digite uma palavra:\n"); gets(a); /* Neste ponto (se o usuário não tiver sido maldoso e digitado mais do que nove caracteres antes de apertar <Enter>) os elementos do array 'a' terão recebido os valores correspondentes aos caracteres digitados pelo usuário, mas os valores dos elementos de 'b', de 'x' e de 'c' ainda não são conhecidos. */ /* No loop abaixo, c recebe sucessivamente, a cada iteração, os valores de 0 a 9. */ for (c=0;c<10;c=c+1) { a[c]=x; /* Aqui você diz que o (c+1)-ésimo (digo 'c+1' porque o 1º elemento tem índice 0, o 2º tem índice 1, e assim por diante) de 'a' recebe o valor de 'x', mas qual o valor de 'x' na primeira iteração, se em nenhum outro ponto do programa executado até agora se atribuiu um valor a 'x'? */ x=b[c]; /* Aqui você atribui um valor a 'x', tomado do (c+1)-ésimo de 'b'. Só que -- pare para pensar -- nenhum elemento de 'b' até agora tem um valor conhecido, porque 'b' não recebeu nenhuma informação depois de ter tido espaço automaticamente reservado para si, de modo que o valor de 'x' só é trocado de algo desconhecido para outra coisa também desconhecida! */ } /* Na prática, o que o loop acima faz é copiar os valores desconhecidos de todos os elementos de 'b' por cima de o que quer que 'a' tenha recebido com a execução de "gets(a)". */ /* A impressão abaixo vai imprimir uma sequência imprevisível de caracteres correspondente aos valores desconhecidos dos elementos não-inicializados de 'b'. Com um pouco de "sorte", o programa pode até travar, dar falha de segmentação ou outro sintoma "divertido", caso não exista nenhum byte com valor nulo do início da região de memória alocada automaticamente para 'b' até o final do segmento de memória ocupado pela pilha do programa. */ printf("%s",b); /* Antes de sair do corpo da função haverá código para liberar a memória que foi automaticamente reservada para 'a', 'b', 'x' e 'c'. */ return 0; }
Resolver problemas de Internet
Como compartilhar a tela do Ubuntu com uma Smart TV (LG, Samsung, etc.)
Descritores de Arquivos e Swappiness
Fez porcaria no teu repositório Git? Aprenda a restaurar uma versão anterior do seu código!
Restaurando Fontes de Download do Hydra no Linux
Atualizando "na marra" o YT-DLP quando começa a dar erro de downloads
Como instalar o WPS com interface e corretor ortográfico em PT-BR no Arch Linux
Controle do PS5 no Linux Mint funciona? [RESOLVIDO] (5)
Bluetooth CSR 4.0 Dongle (Alternativo) (0)
Atualização do Linux para 21 "Vanessa... (3)