2013-08-22 45 views

回答

1

正如它所说。你不能(除非它是该函数的局部变量)。由于数组通过传递的方式,它们会降级为指针,并且所有大小的信息都会丢失(创建数组的上下文之外,因为编译器无法再对其进行假设)。

您必须明确传递大小(或始终传递相同的大小)。

如果stringArray是全局声明的或者该声明位于您声明它的函数内部,则您发布的内容将会有效。

+0

我的心并不想给你+1淹没我的希望... – kBisla

+0

@BlueFlame那么你总是可以使用支持它的语言,如果通过长度对你来说太麻烦了。或者将它包装在你自己的数组struct –

+0

作为一个整数指针传递给生成sting数组的fn的指针... – kBisla

1

这取决于如何声明stringArray。

该工程时:

int main() 
{ 
    char stringArray[500]; 
    int noOfStrings = sizeof(stringArray)/sizeof(stringArray[0]); 
    ... 
} 

但不在:

int function(char *stringArray) 
{ 
    int noOfStrings = sizeof(stringArray)/sizeof(stringArray[0]); 
    ... 
} 

在第一种情况,字符串数组是类型char [500]的一个常数,sizeof运算给出的字节数分配给数组。

在第二种情况下,stringArray是指向char的指针,sizeof给出指针的大小。

他们是两个完全不同的东西,只是看起来很相似。

+0

+1对比两个场景,其中sizeof计算工作和其他地方没有。理解以下两者之间的区别至关重要:(1)声明为函数参数的数组(变相指针); (2)是一个局部变量的数组; (3)在当前文件中定义的文件范围变量; (4)在其他文件中定义并用不完整类型声明的外部变量。 –

1

请张贴您的代码。乍一看,你想要在运行时计算一个值的具体解决方案是不可能的。

但是,您可能能够代码/定义一个宏为:

#define strsize sizeof(stringArray)/sizeof(char *) 

如果字符串数组是字符数组的指针,但没有看到你的源也很难提出具体的解决方案。

有时一个虽然不是直接可能的解决方案仍然可以实现,但通过其他方法!

相关问题