Main Content

MISRA C:2023 Rule 21.6

The Standard Library input/output functions shall not be used

Since R2024a

Description

Rule Definition

The Standard Library input/output functions shall not be used.

Rationale

This rule applies to the functions that are provided by <stdio.h> and in C99, their character-wide equivalents provided by <wchar.h>. Using these functions can cause unspecified, undefined and implementation-defined behavior.

Polyspace Implementation

Polyspace® reports a violation if you call the file and stream input/output functions from the <stdio.h> and <wchar.h> headers..If the Standard Library function is a macro and the macro is expanded in the code, this rule is violated. Polyspace assumes that rule 21.2 is not violated.

Troubleshooting

If you expect a rule violation but do not see it, refer to Diagnose Why Coding Standard Violations Do Not Appear as Expected.

Examples

expand all

In this example, the function func() calls various file and stream input/output functions from the headers <stdio.h> and <wchar.h>. Polyspace reports violations of this rule on their uses.

#include <stdio.h>
#include <wchar.h>

void mixed_io_example() {
    // Define a buffer for wide characters
    wchar_t wbuffer[50];

    // Read a wide string from standard input
    wprintf(L"Enter a wide string: "); // Noncompliant
    fgetws(wbuffer, 50, stdin); // Noncompliant

    // Print the wide string using wide character output
    wprintf(L"You entered: %ls", wbuffer); // Noncompliant

    // Define a buffer for regular characters
    char buffer[50];

    // Read a regular string from standard input
    printf("Enter a regular string: "); // Noncompliant
    fgets(buffer, 50, stdin); // Noncompliant

    // Print the regular string using regular character output
    printf("You entered: %s", buffer); // Noncompliant
}

Check Information

Group: Standard Libraries
Category: Required
AGC Category: Required

Version History

Introduced in R2024a

expand all