【问题标题】:memset with 0 and 0X00带有 0 和 0X00 的 memset
【发布时间】:2014-02-19 14:54:57
【问题描述】:

下面几行有什么不同:

char myname[512]; -- created a character array and wants to memset it.

下面两行有什么不同吗?

memset (&myname, 0x00, sizeof(myname));
memset (&myname, 0, sizeof(myname));

我很确定两者都会使 myname 数组无效。

【问题讨论】:

  • 不,没有区别。
  • 00,与基数无关。
  • 事实上,从技术上讲,0 被解析为八进制常量,而不是十进制常量。
  • 另外,您可能需要确保 sizeof(myname) 为您提供所需的价值...
  • 或者干脆写成char myname[512]={}; 或使用std::fill,当你决定用不是char 的类型初始化0 以外的东西时,这也可以工作。 memset 令人讨厌的地方在于,它看起来有效,而实际上它只是在一个特殊情况下巧合地“有效”。

标签: c++ memset


【解决方案1】:

0x00 语法仅供程序员使用。编译后的代码不会有任何区别。

如果你想自己快速尝试实验,你可以使用gcc explorer

您会看到生成的程序集是相同的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多