gcc bugado

1. gcc bugado

felipe silva
lipman

(usa Debian)

Enviado em 18/10/2016 - 19:26h

boas...
meu gcc esta bugado, ele compila mas o programa não funciona...
o programa é esse:
https://www.vivaolinux.com.br/script/Gerador-de-wordlist/
não alterei nem 1 linha!
abraços!


  


2. Re: gcc bugado

felipe silva
lipman

(usa Debian)

Enviado em 18/10/2016 - 20:05h

SamL escreveu:

Como assim não funciona? Ele não imprime nada?
Acredito que o único porém é que seu programa exige que se crie antes o arquivo "passwordlist.txt", já que o pwl é aberto em modo somente escrita "w", e não "w+" como imagino que você queria. EDIT: ou mesmo deveria abrir em modo de anexação "a"


ele roda, mas não imprime e nem cria a wordlist...
outro problema tambem, foi hoje a tarde quando fui criar um check sum e mesmo as entradas estando corretas ou erradas, o resultado é sempre o mesmo...
agora não dá porque estou pelo celular, mas tarde eu posto o codigo!
abraços!


3. Re: gcc bugado

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/10/2016 - 21:47h

    long int n1;
long int n2;


Poderia ser unsigned long int?

    for (n1 = n1; n1 <= n2; n1++){ 


Por que n1 = n1?
Deveria ser algo como

(i=n1;i<=n2;i++)

    printf ("%i\n", n1);
fprintf (pwl, "%i\n", n1)
;

A máscara do printf() para long costuma ser %ld para signed e %lu para unsigned.
Vale para scanf().

Uma coisa que percebi faltar é o teste que diz se o fopen() criou, abriu etc. o arquivo corretamente.

Não sei se estas observações resolvem.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



4. Re: gcc bugado

felipe silva
lipman

(usa Debian)

Enviado em 19/10/2016 - 15:34h

aqui está o outro que não roda direito:

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
char ch1 [1000];
char ch2 [1000];

printf ("sum do site=> ");
fgets (ch1, 1000, stdin);

printf ("confirme com a da iso=> ");
fgets (ch2, 1000, stdin);


if (ch1 == ch2){

system ("clear");
printf ("sum do site: %s\n", ch1);
printf ("sum da iso: %s\n", ch2);
printf ("confere!\n");
}

else{

system ("clear");
printf ("sum do site: %s\n", ch1);
printf ("sum da iso: %s\n", ch2);

printf ("não confere!\n");
}




return EXIT_SUCCESS;
}


abraços!


5. Re: gcc bugado

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/10/2016 - 15:42h

ch1[1000] e ch2[1000] estão ambos em teoria vazios ou com algum lixo da memória.
Seria melhor trabalhar com algo mais concreto para entender o que está dando errado.
É checksum? A string de checksum vem de fora ou usa um algoritmo?

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



6. Re: gcc bugado

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/10/2016 - 16:08h

Eu sempre fico impressionado como alguém, ao escrever um programa simples mas que não funciona, quer logo colocar a culpa no compilador, em vez de olhar para o próprio programa primeiro.


Além de ter utilidade limitada, duplicando de forma piorada aquilo que se pode fazer com o comando seq, o programa indicado na primeira postagem possui diversos exemplos de erros e de práticas de programação ruins.


Exemplos de erros:

- Declaração inadequada da função main -- deveria ser “int main(void)”, já que o programa não recebe argumentos pela linha de comando (se os recebesse, deveria ser “int main(int argc, char **argv)” ou equivalente).

- Conversões de scanf() incompatíveis com os tipos de dados das variáveis que devem receber os valores lidos.

- Mesmo erro nas chamadas a printf() e fprinf() que imprimem o valor de n1.

- Se as conversões de scanf() estivessem correta, ainda haveria a chance de o laço de repetição nunca acabar. Se o valor finalmente atribuído a n2 for igual ao maior valor possível para um dado do tipo long int, então por definição a comparação “n1<=n2” será sempre verdadeira.


Exemplos de hábitos ruins:

- Não se testam os valores de retorno das chamadas a scanf(), de modo que n1 e n2 podem chegar com valores desconhecidos ao laço de repetição (e.g. se o usuário digitar uma letra em vez de um valor numérico).

- Se acontecer o problema mencionado acima, o restante da execução do programa fica imprevisível. Com sorte, o loop pode terminar sem executar nenhuma iteração (se n1>n2); com azar, pode nunca acabar (n2==LONG_MAX). Depender de sorte, em qualquer programa, é o fim da picada.

- Também não se testam os resultados das operações de escrita. De fato, é bem menos comum fazer isso mas, a rigor, também as operações de escrita deveriam ser verificadas quanto a possíveis erros, especialmente num programa que gera um arquivo como saída. Só não devem verificar se as operações de escrita foram bem sucedidas programas que não se importem de perder dados ou de entregar ao usuário algo diferente daquilo que ele pediu..

- A atribuição “n1=n1” não chega a ser um erro, mas é inútil. Sendo inútil, deveria ser removida. A sintaxe do comando for permite essa remoção.

- Contudo, se você quiser evitar o possível loop infinito, possivelmente não deve usar for, mas talvez uma combinação de if com do-while.

- Chamar system() para uma operação trivial como limpar a tela é um tremendo desperdício. Se limpar a tela fosse absolutamente necessário para o programa, a funcionalidade deveria residir no programa, ainda que através de uma biblioteca padronizada, tal como Curses ou algum clone da ConIO.

- Chamar system() também é um tremendo furo de segurança, ainda mais quando você não diz o caminho exato do comando a ser executado. Se o usuário possui algum script chamado clear num diretório local que esteja presente no valor da variável de ambiente PATH, esse script pode acabar sendo chamado, em vez do utilitário do sistema que você esperava que fosse chamado.

- 34,48% da extensão do programa (10 de 29 linhas contendo texto) são usadas com créditos e outras firulas. Acho que não precisa disso -- ainda mais no atual estado do programa.


7. Re: gcc bugado

felipe silva
lipman

(usa Debian)

Enviado em 19/10/2016 - 17:35h

paulo1205 escreveu:

Eu sempre fico impressionado como alguém, ao escrever um programa simples mas que não funciona, quer logo colocar a culpa no compilador, em vez de olhar para o próprio programa primeiro.


Além de ter utilidade limitada, duplicando de forma piorada aquilo que se pode fazer com o comando seq, o programa indicado na primeira postagem possui diversos exemplos de erros e de práticas de programação ruins.


Exemplos de erros:

- Declaração inadequada da função main -- deveria ser “int main(void)”, já que o programa não recebe argumentos pela linha de comando (se os recebesse, deveria ser “int main(int argc, char **argv)” ou equivalente).

- Conversões de scanf() incompatíveis com os tipos de dados das variáveis que devem receber os valores lidos.

- Mesmo erro nas chamadas a printf() e fprinf() que imprimem o valor de n1.

- Se as conversões de scanf() estivessem correta, ainda haveria a chance de o laço de repetição nunca acabar. Se o valor finalmente atribuído a n2 for igual ao maior valor possível para um dado do tipo long int, então por definição a comparação “n1<=n2” será sempre verdadeira.


Exemplos de hábitos ruins:

- Não se testam os valores de retorno das chamadas a scanf(), de modo que n1 e n2 podem chegar com valores desconhecidos ao laço de repetição (e.g. se o usuário digitar uma letra em vez de um valor numérico).

- Se acontecer o problema mencionado acima, o restante da execução do programa fica imprevisível. Com sorte, o loop pode terminar sem executar nenhuma iteração (se n1>n2); com azar, pode nunca acabar (n2==LONG_MAX). Depender de sorte, em qualquer programa, é o fim da picada.

- Também não se testam os resultados das operações de escrita. De fato, é bem menos comum fazer isso mas, a rigor, também as operações de escrita deveriam ser verificadas quanto a possíveis erros, especialmente num programa que gera um arquivo como saída. Só não devem verificar se as operações de escrita foram bem sucedidas programas que não se importem de perder dados ou de entregar ao usuário algo diferente daquilo que ele pediu..

- A atribuição “n1=n1” não chega a ser um erro, mas é inútil. Sendo inútil, deveria ser removida. A sintaxe do comando for permite essa remoção.

- Contudo, se você quiser evitar o possível loop infinito, possivelmente não deve usar for, mas talvez uma combinação de if com do-while.

- Chamar system() para uma operação trivial como limpar a tela é um tremendo desperdício. Se limpar a tela fosse absolutamente necessário para o programa, a funcionalidade deveria residir no programa, ainda que através de uma biblioteca padronizada, tal como Curses ou algum clone da ConIO.

- Chamar system() também é um tremendo furo de segurança, ainda mais quando você não diz o caminho exato do comando a ser executado. Se o usuário possui algum script chamado clear num diretório local que esteja presente no valor da variável de ambiente PATH, esse script pode acabar sendo chamado, em vez do utilitário do sistema que você esperava que fosse chamado.

- 34,48% da extensão do programa (10 de 29 linhas contendo texto) são usadas com créditos e outras firulas. Acho que não precisa disso -- ainda mais no atual estado do programa.


Poderia me dar mais boas dicas ???
Para uma melhor prática!
Abraços!


8. Re: gcc bugado

felipe silva
lipman

(usa Debian)

Enviado em 19/10/2016 - 20:58h

listeiro_037 escreveu:

ch1[1000] e ch2[1000] estão ambos em teoria vazios ou com algum lixo da memória.
Seria melhor trabalhar com algo mais concreto para entender o que está dando errado.
É checksum? A string de checksum vem de fora ou usa um algoritmo?

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


como assim?


9. Re: gcc bugado

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/10/2016 - 21:54h

Não entendi o que fgets() faz com stdin usando um vetor de 1000 caracteres vazio.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



10. Re: gcc bugado

felipe silva
lipman

(usa Debian)

Enviado em 19/10/2016 - 22:24h

listeiro_037 escreveu:

Não entendi o que fgets() faz com stdin usando um vetor de 1000 caracteres vazio.

----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


É para receber o checksum digitado pelo usuario


11. Re: gcc bugado

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/10/2016 - 22:28h

Agora entendi a proposta.
Existem diversos checksums.
Seus tamanhos podem ser absurdos.

Será que compensa digitar carácter a carácter?

sha512sum minix_R3.3.0-588a35b.iso 
d7c2643624b0f66f9d63bcd8e422cad144aadafb6fd81a0799b3077bfc7f6c5b0200438999e21cba92496389f06a131ec9f2afacdf79e5c9a58c261794181d0f minix_R3.3.0-588a35b.iso


----------------------------------------------------------------------------------------------------------------
Nem direita, nem esquerda. Quando se trata de corrupção o Brasil é ambidestro.
(anônimo)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



12. Re: gcc bugado

Paulo
paulo1205

(usa Ubuntu)

Enviado em 20/10/2016 - 10:08h

listeiro_037 escreveu:

Não entendi o que fgets() faz com stdin usando um vetor de 1000 caracteres vazio.


Agora quem não entendeu fui eu. Qual o problema com a chamada a fgets() (além, é claro, de não se verificar se ela foi executada com sucesso)?

O pior erro do segundo programa é a forma errônea de tentar comparar as strings, cujo resultado será sempre falso.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts