Arquivos


1,464
Visitantes
Únicos
Powered By Google Analytics
Tchelinux 2009, 14 de Novembro na PUC-RS em Porto Alegre
Software Livre

O tipo Char no C/C++

Devido a minha grande dificuldade em entender os diversos tipos de char que a linguagem C apresenta, decidi escrever esse post para aprender mais sobre essa variável que certamente é a pior das variáveis que existe nas linguagens de programação, na minha opinião.
Particularmente eu acho que programar em C puro hoje em dia não é viável, eu programo em C++ usando as bibliotecas do Qt 4.5 o que é um mundo totalmente diferente do C, mas como nesse semestre na faculdade estou fazendo a cadeira de programação paralela e distribuída, e o cluster da faculdade onde testamos os nosso programas só compila programa em C, me obriguei a estudar o C novamente linguagem que eu já tinha abandonado a algum tempo.

Tipo char[] e o char[X]

Essas duas formas de declaração do char são equivalentes, sendo que declarando o char[] dessa forma o compilador será o responsável por determinar o tamanho do espaço que será alocado na pilha para a variável local.

Ex:
char var1[10] = “teste”; // Ocupa 10 caracteres na pilha
char var2[] = “teste”; // Ocupa 6 caracteres na pilha (5 mais o ‘\0′ que indica fim da string

Como a constante “teste” é copiada para o espaço alocado, você pode alterar o conteúdo da variável sem ter nenhum problema. Mas não pode retornar esse tipo de variável, pois elas são destruídas ao finalizar a execução da função que as criou, pois elas estão na pilha.

Tipo char *

O tipo char* você aloca apenas o espaço para um endereço de memória, então:

char *var3 = “outro”;

Aponta diretamente para a constante “outro”, de modo que você não pode alterar esta variável. No entanto você pode retornar a variável, pois nesse caso você estaria retornando apenas um número que representa um endereço para uma constante.
Obs.: A declaração para esse tipo de variável deve ser “const char *var3= …”, pois aponta para uma constante.

Outra dúvida que tinha é com relação a passagem de parâmetros char em funções, não existe diferença na passagem dos parâmetros com char[], char[10] ou char*, em todos estes casos está sendo passado o endereço da variável. Se este parâmetro pode ser alterado ou não, depende inteiramente de como a variável passada foi declarada na rotina que chamou a função em questão. Para que o usuário da função saiba se o parâmetro será alterado ou não, você deve indicar isto através do modificador ‘const’.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
void f1(char s[10]) {
    s[0] = 't';
}

void f2(char s[]) {
    s[0] = 'n';
}

void f3(char *s) {
    s[0] = 'o';
}

int main(void) {
    char s1[10] = "Teste...";
    char s2[] = "Teste...";
    char *s3 = "Outro...";

    printf("1a: ");
    f1(s1);
    printf("%s\n", s1);

    printf("1b: ");
    f2(s1);
    printf("%s\n", s1);

    printf("1c: ");
    f3(s1);
    printf("%s\n", s1);

    printf("2a: ");
    f1(s2);
    printf("%s\n", s2);

    printf("2b: ");
    f2(s2);
    printf("%s\n", s2);

    printf("2c: ");
    f3(s2);
    printf("%s\n", s2);

    printf("3a: "); // Nesta chamada vai gerar o erro
    f1(s3);
    printf("%s\n", s3);

    printf("3b: ");
    f2(s3);
    printf("%s\n", s3);

    printf("3c: ");
    f3(s3);
    printf("%s\n", s3);

    return 0;
}

A saída do programa foi essa:
1a: teste…
1b: neste…
1c: oeste…
2a: teste…
2b: neste…
2c: oeste…
Segmentation fault (core dumped)

O programa compila sem problemas, mas durante a execução ele apresenta erro ao ser passado a variável ’s3′ para ‘f1′, pois esta variável aponta para uma constante do programa, que a função tenta alterar. Se você declarasse ’s3′ como ‘char *s3 = s1;’ ou ‘char *s3 = s2′ ou ‘char *s3; s3 = malloc(10);’ o erro não aconteceria.

Inicialização com new char(10) ou malloc(10)

A declaração do char da forma “char *var = new char(10)” é equivalente em C á “char *var = malloc(10)”, fazendo a declaração dessa forma, as variáveis são alocadas em um outro espaço de memória, chamado “heap” ou “free store”. Dessa forma não só é possível alterar a variável como também é possível retorna-la.
Um cuidado importante quando for feita a alocação dessa forma é não esquecer de realizar a liberação da memória que foi alocada, para liberar a memória alocada com o “new” usa-se o comando “delete var”, nesse caso em C++ e para liberar a memória alocada com o malloc ou calloc usa-se o “free(var)” essa é a versão em C.
Se você vai alocando espaço de memória, e nunca desaloca, o resultado é um “vazamento de memória”. Que significa que a aplicação vai ficando cada vez mais lenta e que em alguns casos pode acabar alocando toda a memória RAM do computador.

Esse texto foi totalmente feito utilizando a dica do Márcio Gil, que me postou essa resposta através do grupo linguagem-C do yahoo grupos.

Importar arquivo eps no Gimp

Essa dica é para quem precisa manipular arquivos eps no windows, eu particularmente estou usando esse formato de arquivo nas imagens que estou usando no meu trabalho de conclusão, como estou usando o Latex para escrever o TC esse formato de imagem é o mais indicado para usar.

Eu estava recebendo uma mensagem de erro assim:

Error starting Ghostscript. Make sure that Ghostscript is installed and – if necessary – use the environment variable GS_PROG to tell GIMP about its location.
(Failed to execute child process (No such file or directory))

Could not interpret ‘x.eps’

Essa mensagem ocorre porque o Gimp não sabe onde esta instalado o executável do ghostscript, para resolver isso é preciso seguir esse passos:
- clicar com o botão direito em Meu Computador
- Ir em propriedades
- Opções avançadas
- Ir em variáveis de ambiente
- Nas variáveis de ambiente do sistema clicar em Nova Variável
- Nome da variável GS_PROG
- Na opção valor da variável colocar o caminho para o Ghostscript. No meu caso foi : C:\Program Files\gs\gs8.64\bin\gswin32.exe
- Salvar e reiniciar o Gimp

Com isso você já deve ser capaz de importar arquivos eps pelo Gimp

Dica de RUP e UML

Finalmente achei uma coisa interessante nas minhas pesquisas para escrever o meu trabalho de conclusão na faculdade, estava procurando informações sobre os diagramas utilizados na modelagem UML e cheguei nesse site que tem uma belo material de RUP e descreve tudo bem detalhado e o material está em português o que vai quebrar o galho de muita gente.
O endereço do site é http://www.wthreex.com/rup/ para aqueles que estão estudando modelagem de sistemas vale a pena.

XI Caminhada da Paz - Imaruí até Urubici/SC

No dia 30/10 até o dia 2/11/2009 aconteceu a XI Caminhada da Paz saindo de Imaruí/SC e terminando em Urubici/SC, foram 4 dias de caminhada percorrendo cerca de 120 km por estradas de terra.
Eu fui numa das vans que saíram de Porto Alegre, ao total foram 38 gaúchos de várias cidades do estado, inclusive de regiões mais distantes como Santa Maria e Uruguaiana.
A nossa viagem foi bem desgastante, pois saímos de Porto Alegre as 19 hs e chegamos em Imaruí as 3 hs da manhã e a caminhada tava marcada para começar as 8 hs então não tivemos muito tempo para descansar.
O caminho percorrido pela caminhada é muito bonito, com muitos rios, cachoeiras e belas paisagens, o ponto fraco da caminhada é que as estradas de terra que percorremos também são as estradas utilizadas pelos carros e caminhões, por isso muitas vezes eramos cobertos de poeira por algum caminhão que estava passando, eu inclusive no último dia já estava com a garganta irritada de tanto pó que eu já tinha respirado.
A minha critica fica com relação a alimentação que nos foi oferecida e a estrutura dos locais que ficamos. Durante a viagem eu já tinha visto o pessoal comentar que no ano anterior os que chegavam por último ficavam muitas vezes sem comida, e nesse ano foi pior, eles estavam oferecendo como alimentação sopa, imagina o cara caminhar num dia 34 km, embaixo de uns sol escaldante, sendo oferecido como almoço risoto, pão e queijo e na janta uma sopinha de legumes, resumindo nesse dia eu acabei comendo apenas um pão com queijo no almoço, pois não curto galinha e na janta não comi nada e para piorar as coisas não tinha nada na cidade para comer, resumindo fui dormir com fome e muito irritado.
Eu espero que para o próximo ano alguém explique para o pessoal da organização que para pessoas que estão fazendo atividade física o alimento mais necessário para recuperação do corpo são os carboidratos, por isso eles são a base da piramide alimentar, inclusive abaixo está a piramide alimentar para não restar dúvidas.

Pirâmide Alimentar

A minha outra critica foi com relação a organização, nós chegamos na última cidade e o ginásio que íamos dormir estava todo empoeirado, sendo que nós mesmos tivemos que dar uma limpada para por os sacos de dormir, e o pior de tudo foi os banheiros que ficaram sem água para o banho, e estavam imundos, teria que ter gente limpando e organizando as coisas, imagina um grupo de 160 caminhantes homens e mulheres todos tendo que tomar banho em banheiros com apenas 2 chuveiros.

Abaixo estou colocando algumas das minha fotos, o resto das fotos está no meu álbum tem mais de 600 fotos, o caminho percorrido não poderei colocar pois perdi os dados do meu GPS e fiquei apenas com o que foi percorrido no último dia.

Caminhada da Integração - Gramado e Canela

Nesse sábado dia 24/10 foi o dia da caminhada da integração, organizada pela Cassia com ajuda da prefeitura de Gramado. Nos encontramos na rua coberta de Gramado para sairmos as 9 hora para o parque do Caracol em Canela, com os ônibus que foram cedidos pela prefeitura de Gramado.
Chegamos no parque do Caracol e foi marcado a saída da caminhada para as 11 horas em direção a Gramado. Nesse tempo fomos conhecer o parque do caracol que tem um belvedere com uma bela vista para a cachoeira do Caracol, como pode-se ver em algumas das minhas fotos.
Após bater as fotos no belvedere descemos as escadas que levam até a base da cachoeira do caracol, é uma escadaria bem cansativa, fez o pessoal parar algumas vezes para descansar, mas a vista da base da cachoeira são muito bonitas vale a pena a caminhada.
Depois formos para trilha que leva até as ruínas do moinho que fica no topo da cachoeira, a vista do topo e das corredeiras também valem a caminhada que por sinal e bem pequena, em uma hora no parque podemos dizer que conhecemos praticamente tudo, só faltou andar no trem.
Abaixo tem a foto oficial da caminhada que tiramos quando estávamos no parque do Caracol.

Foto de Capa

Percorremos o trajeto por estrada de chão, onde passamos pela barragem do mato queimado, onde estão fazendo mais uma parque, vai ser um parque bem bonito quando estiver pronto.
Infelizmente quando estavamos saindo da barragem começou a chuva e o resto do trajeto não pode ser fotografado, mas as fotos que consegui tirar antes da chuva, mostram a beleza do lugar.

Abaixo está o tracklog da viagem: