2011-04-30 91 views
1

我声明一个字符串数组非常简单,硬编码,但它不断给我array type has incomplete element type错误。C多维数组字符串

我想这与每个数组的长度有关,但我不知道如何解决这个问题,没有为字符串设置固定的长度。

char allocate[][2][] = { // Error with or without the 2 
    {"value1","value2"}, 
    {"value3","value4"} 
}; 

回答

10

该语法无效。如果您想要一个真正的多维数组,除第一个维外,必须指定所有维。 (编译器必须知道“内”阵列有多大,以便执行地址计算的外部尺寸。)

尝试此代替:

const char *allocate[][2] = { 
    {"value1","value2"}, 
    {"value3","value4"} 
}; 

它声明的const char *的2D阵列。

请注意,如果你想要的字符串,你可以到,那么上述方法将无法正常工作。

+0

所以这个数组包含指向字符串的指针(然后将其存储在数组之外?)如果删除了'const'关键字,你不能写入字符串吗? – 2011-04-30 13:44:44

+0

@J V:不,这是未定义的行为(尽管通常你会得到一个seg-fault)。字符串文字是只读的,实际上应该总是用'const char *'指向。 C允许你使用'char *'的唯一原因是出于一些向后兼容性问题。 – 2011-04-30 13:48:43