哪个是从给定的C中将char*初始化为C的有效方法?

ach*_*ora 0 c

这个问题可能看起来很简单,但这是一个选择.我已经在相同的代码库中看到了这些,并且对这种方法感到有些困惑.

我们做一个空字符串初始化,所以我们不会得到解引用错误(我认为).

static char *name=(char *)"";
Run Code Online (Sandbox Code Playgroud)

和大多数情况我见过这个

static char *name=NULL;
Run Code Online (Sandbox Code Playgroud)

在极少数情况下也见过这个.

static char *name=(char *) 0;
Run Code Online (Sandbox Code Playgroud)

我们可以将这些做法中的任何一种称为标准并且是普遍推荐的吗?如果是的话是什么逻辑?

Jon*_*ler 5

演员的两个版本是非标准的; 在任何一种情况下都不需要演员(虽然在第二种情况下有更多的理由).

初始化做了两个不同的工作 - 两者都是好工作,但它们是不同的.

static char *name = "";
Run Code Online (Sandbox Code Playgroud)

name是一个指向空字符串的有效指针.它可以传递给期望有效指针的函数,但是空字符串是合理的.

static char *name = NULL;
static char *name = 0;
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,name都是一个空指针 - 它不指向任何有效的地方.name在这些初始化之后取消引用会导致未定义的行为,这意味着您的程序通常(但不一定)崩溃.在解除引用之前,您需要使变量点处于有效状态.