我只是想知道是否将 extern 变量视为源缓冲区并将其作为参数传递给 strcpy() 或任何其他可能导致缓冲区溢出的函数与传递给它的参数一样不安全并且可能导致缓冲区溢出来自具有高于缓冲区大小的指定限制的 fgets() 函数。
是否应该特别注意这些外部变量,或者是否应该将它们与任何其他变量区别对待?
我只是想知道是否将 extern 变量视为源缓冲区并将其作为参数传递给 strcpy() 或任何其他可能导致缓冲区溢出的函数与传递给它的参数一样不安全并且可能导致缓冲区溢出来自具有高于缓冲区大小的指定限制的 fgets() 函数。
是否应该特别注意这些外部变量,或者是否应该将它们与任何其他变量区别对待?
extern
仅定义变量的链接它不会以任何其他方式更改变量。
是否安全?
它与任何其他变量一样安全/不安全,被声明的变量extern
没有任何影响。
使用strcpy
本身就是不安全的,可能会导致缓冲区溢出。
在 C++ 中,更好的选择是使用std::string
假设您完全控制变量的使用,那么它与任何其他“全局”甚至局部变量一样“安全”。如果您无法控制变量的使用及其创建方式(例如,其他人提供了您要链接的模块)并且您不知道他们的编码实践,那么明智的做法是多处理变量而不是通常的怀疑。
不过,一般来说,当然最好使用接受目标缓冲区长度的“安全” strcpy 函数之一,即使您完全控制变量的使用也是如此。
传递任何参数strcpy
是不安全的,并且可能导致缓冲区溢出。extern
与这个事实无关。智者使用std::string
(或支持 Unicode 的变体),但从不使用char*
或其中strcpy
任何一个。