☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

指向常量字符串的指针应使用 const 声明

6.2.6 ID_constStrToNonConstPtr
目录 › next › previous

常量字符串与非常量字符串指针的隐式转换是不安全的,一旦相关内存被修改会导致标准未定义的行为,这种转换在 C++ 标准中是过时的,在 C 代码中也不应出现。

指向常量字符串的指针应声明为 const chartype *,chartype 为常量字符串中的字符类型,如:

char、wchar_t、char16_t、char32_t

示例:

char* p = "....";   // Non-compliant
p[x] = '\0';        // Undefined behavior

例中非常量指针 p 指向常量字符串,通过 p 修改常量数据一般会引发“段错误”而导致崩溃,应改为:

const char* p = "....";   // Compliant
p[x] = '\0';              // Compile-time protected

改为常量字符串指针后,错误的操作无法通过编译。

又如:

void foo(char*);

void bar() {
    foo("....");   // Non-compliant
}

应将 foo 的参数类型改为 const char*,或将常量字符串复制后传给 foo 函数。

相关

ID_nonConstUnmodified

依据

ISO/IEC 9899:1999 6.4.5(6)-undefined ISO/IEC 9899:2011 6.4.5(7)-undefined ISO/IEC 14882:1998 D.4(1)-deprecated ISO/IEC 14882:2003 2.13.4(2)-undefined ISO/IEC 14882:2003 D.4(1)-deprecated ISO/IEC 14882:2011 2.14.5(12)-undefined ISO/IEC 14882:2017 5.13.5(16)-undefined

参考

MISRA C 2012 7.4 SEI CERT STR30-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.