Spec Sistemas Com C • Trilha Progressiva em 4 Níveis


🎯 Nível 1: Fundamentos

Problema 12.1 — Manipulação Segura com strlen(), strncpy() e strncat()

Contexto: Manipulação Segura com strlen(), strncpy() e strncat() no contexto de Cadeias de Caracteres, e Segurança OWASP.

Requisitos de Execução:

  1. Copiar e concatenar strings respeitando o terminador nulo \0 e tamanhos máximos de buffer.

Resultado Esperado

Strings manipuladas de forma segura com funções delimitadas.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_1_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Cadeias de Caracteres, <string.h> e Segurança OWASP
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
#include <string.h>

int main(void) {
    char destino[32] = "Portal: ";
    const char *origem = "Linguagem C";
    strncat(destino, origem, sizeof(destino) - strlen(destino) - 1);
    printf("String resultante: %s (Tamanho: %zu)\n", destino, strlen(destino));
    return 0;
}

🔍 Nível 2: Prática

Problema 12.2 — Comparação e Busca de Substrings com strcmp() e strstr()

Contexto: Comparação e Busca de Substrings com strcmp() e strstr() no contexto de Cadeias de Caracteres, e Segurança OWASP.

Requisitos de Execução:

  1. Localizar substring dentro de texto corporativo e validar igualdade de identificadores.

Resultado Esperado

Substring localizada e índice de início exibido.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_2_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Cadeias de Caracteres, <string.h> e Segurança OWASP
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
#include <string.h>

int main(void) {
    const char *log = "ERROR_404: Recurso nao encontrado";
    if (strstr(log, "ERROR") != NULL) {
        puts("Registro classificado como ERRO!");
    }
    return 0;
}

⚡ Nível 3: Integração

Problema 12.3 — Tokenização de Strings com strtok_r() Reentrante (Thread-Safe)

Contexto: Tokenização de Strings com strtok_r() Reentrante (Thread-Safe) no contexto de Cadeias de Caracteres, e Segurança OWASP.

Requisitos de Execução:

  1. Separar linha de arquivo CSV em múltiplos tokens usando versão thread-safe strtok_r.

Resultado Esperado

Linha CSV dividida em tokens isolados sem variáveis estáticas globais.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_3_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Cadeias de Caracteres, <string.h> e Segurança OWASP
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
#include <string.h>

int main(void) {
    char linha[] = "Carlos;Desenvolvedor;8500.00";
    char *saveptr;
    char *token = strtok_r(linha, ";", &saveptr);
    while (token != NULL) {
        printf("Token: %s\n", token);
        token = strtok_r(NULL, ";", &saveptr);
    }
    return 0;
}

🏆 Nível 4: Desafio Corporativo

Problema 12.4 — Formatação Segura com snprintf() e Prevenção de Format String Attack

Contexto: Formatação Segura com snprintf() e Prevenção de Format String Attack no contexto de Cadeias de Caracteres, e Segurança OWASP.

Requisitos de Execução:

  1. Montar mensagem formatada com snprintf evitando passagem direta de strings de usuário para printf.

Resultado Esperado

Format string vulnerability evitada com snprintf delimitado.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_12_4_SeuNome
  2. Envie na tarefa: Atividade Cap 12 - Cadeias de Caracteres, <string.h> e Segurança OWASP
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>

int main(void) {
    char saida[64];
    const char *usuario = "admin_user";
    int codigo = 1001;
    snprintf(saida, sizeof(saida), "AUDIT: Usuario=%s | Codigo=%d", usuario, codigo);
    puts(saida);
    return 0;
}