在C中初始化以NULL结尾的字符串数组的正确方法

时间:2010-05-01 17:16:24

标签: c string arrays

这段代码是否正确?

char *argv[] = { "foo", "bar", NULL };

3 个答案:

答案 0 :(得分:9)

它在语法上是正确的,它确实创建了一个以NULL结尾的字符串数组。

argv作为main(或等效地,char*[])传递给char**,但将字符串文字视为const char*而不是{{更正确“ {1}}。因此,对于此特定示例,您需要char*

也许你真的不会用“foo”初始化它,但实际上你需要通过argv修改一个可修改的字符串。在那种情况下const char *argv[] = {"foo", "bar", NULL };是正确的。这就是Charles可能的意思,即代码是否“正确”取决于你用它做什么。

答案 1 :(得分:5)

声明或初始化没有明显错误,但它是否“正确”取决于代码的其余部分实际上对argv的作用。

答案 2 :(得分:0)

是的,您的代码正式正确(请参阅Steve关于const的评论)。它将生成一个以char *类型的空指针终止的数组。

您也可以

char *argv[4] = { "foo", "bar" }; 

char *argv[10] = { "foo", "bar" }; 

如果您的阵列由于某种原因必须具有特定大小。在这种情况下,额外的元素也将被设置为空指针,即使您没有显式初始化它们。但我会说,即使在这种情况下,最好使用

char *argv[4] = { "foo", "bar", NULL }; 

因为这将确保数组确实足够长以便以null结尾(如果数组太短,编译器将生成诊断消息)。