相关疑难解决方法(0)

memset()或值初始化将结构清零?

在Win32 API编程中,通常使用struct具有多个字段的C s.通常只有其中几个具有有意义的值,而其他所有值都必须归零.这可以通过以下两种方式之一实现:

STRUCT theStruct;
memset( &theStruct, 0, sizeof( STRUCT ) );
Run Code Online (Sandbox Code Playgroud)

要么

STRUCT theStruct = {};
Run Code Online (Sandbox Code Playgroud)

第二个变体看起来更干净 - 它是一个单行,它没有任何可能输错的参数并导致错误被种植.

与第一个变体相比,它有任何缺点吗?使用哪种变体?为什么?

c c++ struct initialization visual-c++

63
推荐指数
6
解决办法
7万
查看次数

什么时候 memset 为 0 不可移植?

来自GCC bug #53119 中的评论

在 C 中,{0}通用零初始值设定项与 C++ 的通用零初始值设定项等效{}(后者在 C 中无效)。每当您想要一个完整但概念上不透明或实现定义类型的零初始化对象时,就有必要使用它。C 标准库中的经典示例是mbstate_t

mbstate_t state = { 0 }; /* correctly zero-initialized */
Run Code Online (Sandbox Code Playgroud)

与常见但不可移植的相比:

mbstate_t state;
memset(&state, 0, sizeof state);
Run Code Online (Sandbox Code Playgroud)

让我感到奇怪的是,后一个版本可能是不可移植的(即使对于实现定义的类型,编译器也必须知道大小)。这里的问题是什么?什么时候是memset(x, 0, sizeof x)不可移植的?

c portability memset

26
推荐指数
2
解决办法
1406
查看次数

如何将结构指针的所有指针字段初始化为NULL?

我有以下结构:

 struct node {
    int data;
    struct node *next;
};


struct node *n1 = malloc(sizeof(struct node));
Run Code Online (Sandbox Code Playgroud)

我不确定如何将struct指针的所有指针字段初始化为NULL而不导致任何潜在的内存泄漏?

c struct pointers

4
推荐指数
1
解决办法
5240
查看次数

标签 统计

c ×3

struct ×2

c++ ×1

initialization ×1

memset ×1

pointers ×1

portability ×1

visual-c++ ×1