在snprintf中使用sizeof运算符是否可以

Rah*_*s12 4 c

使用带有"snprintf"的sizeof运算符是否可以?例如

   char cstring[20];
   snprintf(cstring,sizeof(cstring),"%s","somestring......");
Run Code Online (Sandbox Code Playgroud)

Joh*_*nck 7

是的,没关系,你发布的具体情况很好,除了你没有检查返回值,所以你不知道该字符串是否被截断.

  • @TimHarper:这取决于应用程序。在某些安全敏感的应用程序中,截断字符串可能会导致安全漏洞,因此不检查返回值可能比分段错误更糟糕。 (2认同)
  • @TimHarper:我说的是截断和OOB写入都可能带来安全隐患,我们无法预先知道哪一个“更好”。两者都不是更好,它们都太可怕了。 (2认同)

use*_*733 5

您发布的示例很好。

但是,在数组衰减到指针的任何情况下,它都不好用:

void func(char s []) {
    snprintf(s,sizeof(s),"%s","somestring......"); // Not fine, s is actually pointer
}
int main(void) {
    char cstring[20];
    func(cstring); // Array decays to pointer
Run Code Online (Sandbox Code Playgroud)