将数组元素初始化为NULL

12
如何将数组中的元素初始化为NULL。例如,如果我有 char *array[10]; 我想要最后一个元素为 NULL ,以便我可以将此数组传递给 execv 。

如何将数组中的元素初始化为NULL。例如,如果我有char *array[10]; 我希望最后一个元素为NULL,这样我就可以将该数组传递给execv函数。


5
将其设为0即可。NULL应该只用于指针。 - chris
抱歉,我编辑了一下。它应该是指针。 - Nazerke
@chris:有关execv的部分表明实际上应该是NULL,但是提问者没有意识到他们正在处理指针数组。 - Fred Foo
1
@chris:你们两个都是对的,execv函数接受一个const char* 和一个 char** 参数。 - Steve Jessop
1
要按照您的要求字面上做,可以将一个10元素数组的最后一个元素设置为null指针,array[9] = 0;。但我怀疑这不是全部。 - Steve Jessop
显示剩余2条评论
4个回答

21
为了将一个char*数组初始化为所有的NULL:
char* array[10] = { NULL }; /* The remaining elements are implicitly NULL. */

如果您想为execv()提供初始元素:
char* array[10] = { "/usr/bin/ls", "-l" }; /* Again, remaining elements NULL. */

或者,如果你希望从数组声明中省略维数:

char* array[] = { "/usr/bin/ls", "-l", NULL };

1

execv接受的是char *数组,而不是char数组。

char *const parms[] = {"abc", "-a", "pqr", NULL};

1

NULL仅仅是:#define NULL (void*) 0 UL

你所说的NULL是指空字符nul,即'\0'

请参考man execv页面或其他exec进程...它实际上接受可变数量的参数


'\0' 的 ASCII 值是多少? - duedl0r
@duedl0r 那将是0。 - WhozCraig
1
这不是标准用法,但你可以说 null。有三种类型,第一种是:已知的 NULL 指针,第二种是 NUL 字符,即 '\0',它的 ASCII 码为 0。第三种是实际的零,即十进制 0,其 ASCII 码为 48。 - Omkant
1
@dueld0r:由于C语言中的字符常量具有“int”类型,因此字符常量“'\0'”与整数常量“0”完全相同。有些人喜欢它,因为它提醒他们正在使用字符。个人而言,我无法避免将其解读为“其整数值为0的字符的‘int’值”(在C++中,它是“其整数值为0的字符的‘char’值”,并且与“char(0)”意思相同)。 - Steve Jessop
1
@Omkant 虽然你表达的意思似乎很明显,但这并不正式正确:NUL/'\0'是由十进制值0表示的ASCII字符。没有ASCII字符0。十进制数48作为ASCII字符'0'是另外一回事。 - alk

-3

如果你的数组是对象、字符串或字符类型,如果你声明它,它将自动为 null。

例如:

Oject [] myarray=new Object[10];

数组中的任何位置都是 null


OP的问题涉及到C语言,而不是像Java这样的面向对象编程(OOP)语言。在C中,最接近对象的东西之一是struct,但它似乎与OP的问题没有太强的关联,至少对我来说是这样。 - Stev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接