Bird
Raised Fist0
Cprogramming~20 mins

Defensive programming practices - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Defensive Programming Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of buffer overflow prevention code

What is the output of this C code that uses defensive programming to prevent buffer overflow?

C
#include <stdio.h>
#include <string.h>

int main() {
    char buffer[10];
    const char *input = "HelloWorld!";
    if (strlen(input) < sizeof(buffer)) {
        strcpy(buffer, input);
        printf("Buffer content: %s\n", buffer);
    } else {
        printf("Input too large for buffer\n");
    }
    return 0;
}
ABuffer content: HelloWorld!
BBuffer content: HelloWorl
CInput too large for buffer
DSegmentation fault
Attempts:
2 left
💡 Hint

Check the length of the input string compared to the buffer size.

🧠 Conceptual
intermediate
1:30remaining
Purpose of defensive null pointer checks

Why is it important to check if a pointer is NULL before using it in C?

ATo avoid dereferencing a null pointer which causes a crash
BTo improve program speed by skipping pointer usage
CTo automatically allocate memory for the pointer
DTo allow the pointer to point to multiple variables
Attempts:
2 left
💡 Hint

Think about what happens if you try to use a pointer that points to nothing.

🔧 Debug
advanced
2:30remaining
Identify the defensive programming mistake

What is the mistake in this code that tries to safely open a file?

C
#include <stdio.h>

int main() {
    FILE *fp = fopen("data.txt", "r");
    if (fp == NULL) {
        printf("File not found\n");
    }
    fprintf(fp, "Hello\n");
    fclose(fp);
    return 0;
}
AThe file is not closed after writing
BThe file is opened in read mode but written to
CThe file pointer is not checked for NULL before fclose
DThe code writes to the file even if fopen failed
Attempts:
2 left
💡 Hint

Look at what happens after the if (fp == NULL) check.

📝 Syntax
advanced
1:30remaining
Which option causes a compilation error?

Which of the following code snippets will cause a compilation error due to defensive programming misuse?

Aif ptr != NULL { *ptr = 10; }
Bif (ptr) *ptr = 10;
Cif (ptr != NULL) { *ptr = 10; }
Dif (ptr == NULL) { return; } *ptr = 10;
Attempts:
2 left
💡 Hint

Check the syntax of the if statement.

🚀 Application
expert
3:00remaining
Result of integer overflow check function

What is the output of this C program that uses defensive programming to check for integer overflow before addition?

C
#include <stdio.h>
#include <limits.h>

int safe_add(int a, int b, int *result) {
    if ((b > 0) && (a > INT_MAX - b)) {
        return 0; // overflow
    }
    if ((b < 0) && (a < INT_MIN - b)) {
        return 0; // underflow
    }
    *result = a + b;
    return 1; // success
}

int main() {
    int x = INT_MAX;
    int y = 1;
    int res;
    if (safe_add(x, y, &res)) {
        printf("Sum: %d\n", res);
    } else {
        printf("Overflow detected\n");
    }
    return 0;
}
ASum: 2147483647
BOverflow detected
CSum: -2147483648
DUndefined behavior
Attempts:
2 left
💡 Hint

Consider what happens when adding 1 to INT_MAX.

Practice

(1/5)
1. What is the main goal of defensive programming in C?
easy
A. To check for errors before they cause problems
B. To write code faster without testing
C. To ignore invalid inputs
D. To make the program run without any comments

Solution

  1. Step 1: Understand the purpose of defensive programming

    Defensive programming is about preventing errors by checking inputs and conditions early.
  2. Step 2: Identify the correct goal from options

    To check for errors before they cause problems clearly states checking for errors before problems happen, which matches defensive programming.
  3. Final Answer:

    To check for errors before they cause problems -> Option A
  4. Quick Check:

    Defensive programming = check errors early [OK]
Hint: Defensive programming means catching errors early [OK]
Common Mistakes:
  • Thinking it means ignoring errors
  • Confusing it with faster coding
  • Believing it removes need for comments
2. Which of the following is the correct way to check for a NULL pointer before using it in C?
easy
A. if (ptr = NULL) { /* use ptr */ }
B. if (ptr != NULL) { /* use ptr */ }
C. if (ptr == 0) { /* use ptr */ }
D. if (ptr = 0) { /* use ptr */ }

Solution

  1. Step 1: Identify correct NULL pointer check syntax

    In C, to check if a pointer is not NULL, use 'ptr != NULL'. Assignment '=' is wrong here.
  2. Step 2: Analyze each option

    'if (ptr != NULL) { /* use ptr */ }' is correct because it checks that ptr is not NULL before use. B and D use '=' for assignment, setting ptr to NULL/0 and making the condition false. 'if (ptr == 0) { /* use ptr */ }' checks if ptr IS null (equivalent to NULL) and then uses it, causing a null dereference crash.
  3. Final Answer:

    if (ptr != NULL) { /* use ptr */ } -> Option B
  4. Quick Check:

    Use '!=' to compare pointer with NULL [OK]
Hint: Use '!=' to compare pointer with NULL, not '=' [OK]
Common Mistakes:
  • Using '=' instead of '==' or '!=' in conditions
  • Confusing NULL with zero without clarity
  • Not checking pointer before use
3. What will be the output of this C code snippet?
int *ptr = NULL;
if (ptr != NULL) {
    printf("Pointer is valid\n");
} else {
    printf("Pointer is NULL\n");
}
medium
A. Pointer is NULL
B. Pointer is valid
C. Compilation error
D. No output

Solution

  1. Step 1: Analyze pointer initialization

    The pointer 'ptr' is set to NULL, meaning it points to nothing.
  2. Step 2: Check the if condition

    The condition 'ptr != NULL' is false because ptr is NULL, so the else block runs.
  3. Final Answer:

    Pointer is NULL -> Option A
  4. Quick Check:

    NULL pointer triggers else block [OK]
Hint: NULL pointer means else block runs [OK]
Common Mistakes:
  • Assuming NULL pointer is valid
  • Expecting compilation error
  • Thinking no output occurs
4. Identify the error in this defensive programming snippet:
void print_length(char *str) {
    if (str = NULL) {
        printf("String is NULL\n");
        return;
    }
    printf("Length: %d\n", strlen(str));
}
medium
A. strlen() cannot be used on strings
B. Missing semicolon after printf
C. Using assignment '=' instead of comparison '==' in if condition
D. Function return type should be int

Solution

  1. Step 1: Check the if condition syntax

    The condition uses 'str = NULL' which assigns NULL to str instead of comparing it.
  2. Step 2: Understand impact of assignment in condition

    Assignment returns NULL (false), so the if block never runs as intended. It should be 'str == NULL'.
  3. Final Answer:

    Using assignment '=' instead of comparison '==' in if condition -> Option C
  4. Quick Check:

    Use '==' to compare pointers, not '=' [OK]
Hint: Use '==' to compare, '=' is assignment [OK]
Common Mistakes:
  • Confusing '=' and '==' in conditions
  • Thinking strlen() is invalid here
  • Ignoring function return type
5. You want to safely read an integer from user input in C. Which defensive programming practice should you apply?
hard
A. Use scanf without checking its return value
B. Use gets() to read input without validation
C. Assume input is always correct and proceed
D. Check scanf's return value and validate the input range

Solution

  1. Step 1: Understand safe input reading

    Using scanf requires checking its return value to confirm input was read correctly.
  2. Step 2: Validate input range

    After reading, check if the integer is within expected limits to avoid errors later.
  3. Final Answer:

    Check scanf's return value and validate the input range -> Option D
  4. Quick Check:

    Check input success and validity [OK]
Hint: Always check scanf return and input validity [OK]
Common Mistakes:
  • Ignoring scanf return value
  • Using unsafe input functions like gets()
  • Assuming user input is always valid
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard