Jump to content

Fernando Mercês

Administrators
  • Posts

    1,523
  • Joined

  • Last visited

  • Days Won

    173

Posts posted by Fernando Mercês

  1. Opa, interessante. Não conhecia esse Hyperion. Dei uma olhada no readme.txt e tem isso:

    The crypter is a C project and can be compiled with the corresponding makefile (tested with Mingw and Visual Studio)

    Ou seja, a compilação é pra ser feita através do Makefile (comando make) no Windows (MinGW ou Visual Studio). De fato, o projeto inclui a windows.h e é um crypter pra PE. Tenta no Windows aí. 😉

    Abraço.

  2. 6 horas atrás, donutLukke disse:

    Muito obrigado, algo tão óbvio e não consegui enxergar, muito paz para você e sua família.

    Pra você e sua família também. 🙂

    6 horas atrás, donutLukke disse:

    É que pensei na hipótese dos IDs serem identificadores que podem mudar, que podem um dia ter letras.

    Entendi. Bom, como exercício ok, mas em geral ID é numérico, até pela velocidade de comparação. 😉

    Abraço!

    • Curtir 1
  3. Opa, bem vindo à comunidade!

    Me parece que a sua função compareAluno() tenta advinhar o que é para comparar (ID, nome ou CPF) através do tamanho da string. Isso é um problema porque tanto CANOME quanto CACPF expandem para 12, fazendo com a que na hora de comparar o CPF, a comparação do if na linha 346 retorne verdadeiro e o programa compare um CPF com um nome.

    A propósito, qual o motivo de você utilizar char[] nos IDs? Se os IDs vão conter só números, podem ser do tipo int.

    Abraço.

    • Agradecer 1
    • Curtir 1
  4. Hi @Mohsen. Welcome to our community. 🙂

    A few things you should consider:

    1. Please edit your current post and format your C code as code by selecting it and clicking the <> button in the text editor. 😉
    2. To your main problem: you are returning a pointer to a local (stack-allocated) buffer that only exists while get_time() is running. You can't do that. In C, you have a few options:

    Declare you return variable in the function that calls the desired function (in your case, it'd be in main()) and pass it to the desired function as reference. Here's an example:

    void get_time(char *currentTime) { // 3. receive the buffer as reference
    	snprintf(currentTime, 80, "%s", "my text"); // 4. write to the buffer
    }
    
    int main(void)
    {
    	char currentTime[80]; // 1. declare/allocate the buffer before calling the function
    	get_time(_timstamp, dt, currentTime); // 2. pass a reference to the buffer
    	printf("current time: %s \n", currentTime); // 5. buffer contains the string set by get_time()
    	return 0;
    }

    As you will notice, I didn't complete the exercise for you. Instead, I've pointed out one way to solve it. 😉

    You could also use a global variable or a dynamically-allocated buffer, but your solution depends on what you've studied. If you never studied pointers, then use a global variable. If you didn't study dynamic memory allocation, then use the pointer reference as shown.

    Other important fixes in your code:

    1. You mixed C and C++ headers and functions and this can become very messy very quickly. For example, string is different from char*. Mixing them will thrown errors. So, choose one language and stick with it. In your case, I recommend choosing C. Here's the fixes you need for that:
      1. Replace <string> by <string.h>.
      2. Remove <iostream>.
      3. Remove <cstring>.
      4. Remove the using directive.
      5. Don't use string. Use char* instead.
      6. Replace main() by main(void).
    2. sprintf() is insecure and decprecated. Use snprintf() instead. The latter needs the maximum number of characters to write (use the same size you've declared the buffer with).

    Surely there's more room for improvement, but I'll stop here for now. 🙂

    Good luck!

  5. @edummoreno se entendi bem, você quer copiar todos os arquivos de uma pasta para uma pasta um nível acima. Neste caso, não precisa descobrir os nomes de arquivos com força bruta (tentar todas as possibilidades até acertar), nem mesmo entrar na pasta. A partir da pasta destino dos arquivos, você faz (em batch):

    copy pasta1\*.* .
    copy pasta2\*.* .

    O “asterisco ponto asterisco” expande para todos os arquivos do diretório. Já o "ponto" significa "diretório atual".

    Isso resolve seu problema?

    Abraço!

  6. O endereço MAC da máquina não. No entanto, as seguintes informações podem estar disponíveis, dependendo do formato de exeuctável em uso e das opções configuradas no compilador e linker:

    • Caminho completo de onde os arquivos de código-fonte estão armazenados, o que pode conter o nome de usuário da máquina.
    • Versão do compilador e do linker utilizado, seja em texto puro, ou seja por padrões que permitam identificação, como os utilizados pelo DIE. Por exemplo, este arquivo contém a lógica que o DIE utiliza para identificar versões do Visual Studio.
    • Data e hora que o arquivo executável foi gerado (somente em PE).
    • Idioma de resources, o que pode sugerir o idioma do Windows de quem compilou o binário (somente em PE).

    Em tempo, sempre que postar código aqui, use o botão <> para formatar seu código como código. Olha a diferença:

    Sem formatação:

    #include <stdio.h>

    printf("Olá, mundo!\n");

    Com formatação:

    #include <stdio.h>
    
    printf("Olá, mundo!\n");

    Valeu!

  7. Olá!

    Bom, tem algumas coisas para serem esclarecidas aí 🙂

    1. Em C, a função strlen() aceita um char* (não um char) como argumento. Este é um ponteiro para um tipo primitivo e é o jeito oficial de se implementar strings em C.
    2. Já em C++, a classe std::string é completamente diferente. Para determinar seu tamanho, ela possui uma função (método) length(). Aqui tem um exemplo de como utilizá-la.
    3. O trecho de código que você postou declara um array de objetos string com dez elementos (e não uma única string). Sendo assim, cada elemento do seu array pode ser uma string com tamanho diferente.

    PS.: C++ também trabalha com os tipos primitivos e com C strings.

    Abraço!

  8. Olá! Considere o seguinte:

    1. Inclua a <stdio.h>.
    2. Use uma função por linha. Fica melhor pra ler o código.
    3. Você não usa nenhuma função da <stdlib.h> nem da <string.h>. Pode remover esses includes. ?
    4. A variável flag é testada no while mas não é inicializada antes. Recomendo utilizar do/while, o que vai fazer com que sua condição fique no final. Alternativamente, você pode inicializar a variável flag com 1 na declaração.
    5. Você usou a variável aux para contar quantos produtos foram inseridos. O problema é que você a incrementa fora do for. Uma solução rápida é colocar i<4 na condição do for (já que tem um if com break no fim dele) e o incremento da aux logo após a leitura do produto, antes da chamada à printf().

    Isso deve ser suficiente para corrigir o programa seguindo a sua lógica. Uma vez corrigido, se quiser saber mais, eu teria outras sugestões. Dá pra resolver a leitura com um loop só ao invés de dois e tem outras melhorias também.

    Abraço.

     

    • Agradecer 1
×
×
  • Create New...