主要内容

MISRA C:2023 Rule 21.6

The Standard Library input/output functions shall not be used

自 R2024a 起

描述

规则定义

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

理由

此规则适用于 <stdio.h> 提供的函数,以及 C99 中由 <wchar.h> 提供的对应宽字符版本函数。使用这些函数可能会导致未指定行为、未定义行为以及实现定义的行为。

Polyspace 实现

如果您调用了 <stdio.h><wchar.h> 头文件中的文件与流输入/输出函数,则 Polyspace® 会报告违规。如果标准库函数是一个宏,并且该宏在代码中被展开,那么就违反了此规则。Polyspace 会假设没有违反规则 21.2。

故障排除

如果您预期会出现违规,但未看到该违规,请参阅诊断为何编码规范违规未按预期显示

示例

全部展开

在此示例中,函数 func() 调用了头文件 <stdio.h><wchar.h> 中的各种文件与流输入/输出函数。当使用了这些函数时,Polyspace 会报告违反了此规则。

#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
}

检查信息

组:标准库
类别:必需
AGC 类别:必需

版本历史记录

在 R2024a 中推出

全部展开


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.