每当我们使用
为什么?为什么不用1或2或其他东西呢?
另外,将结构体设置为0似乎可以工作,但将其设置为1就不行:
memset
时,我们都会将其设置为零。为什么?为什么不用1或2或其他东西呢?
另外,将结构体设置为0似乎可以工作,但将其设置为1就不行:
typedef struct abc{
int a;
} abc;
int main()
{
abc* ab;
memset(ab, 0, sizeof(abc));// it sets abc->a = 0; correct
}
但是,如果我使用1
而不是0
,就像这样:
memset(ab, 1, sizeof(abc));
那么abc->a
的值为垃圾或不等于1。
为什么呢?
memset
将所有字节设置为指定值,而不是整个整数。 - sgarizviab
的目标。该程序是未定义行为(但这不一定是ab->a
不是1的原因)。 - Pascal Cuoqabc
)的变量并使用该地址。如写作abc* ab;
声明一个具有不确定值的指针(意味着您不知道它是什么)。将其用作memset()
调用中的写入目标是未定义行为。此外,如果是 C,则您的main()
程序暗示了一个int
返回值,并且如果是标准 C++ 则无法编译。将其声明为int main()
并返回一个值(EXIT_SUCCESS 或 EXIT_FAILURE)。 - WhozCraigmemset
。改用std::fill
(或std::fill_n
)即可。 - Grizzly