我来到this类似的问题。 但我的优势是,我知道每个字符串是260个字符长。如何计算no。字符串数组中的字符串?
有没有希望?
int noOfStrings = sizeof(stringArray)/sizeof(stringArray[0]);
这是行不通的。
我来到this类似的问题。 但我的优势是,我知道每个字符串是260个字符长。如何计算no。字符串数组中的字符串?
有没有希望?
int noOfStrings = sizeof(stringArray)/sizeof(stringArray[0]);
这是行不通的。
正如它所说。你不能(除非它是该函数的局部变量)。由于数组通过传递的方式,它们会降级为指针,并且所有大小的信息都会丢失(创建数组的上下文之外,因为编译器无法再对其进行假设)。
您必须明确传递大小(或始终传递相同的大小)。
如果stringArray
是全局声明的或者该声明位于您声明它的函数内部,则您发布的内容将会有效。
这取决于如何声明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给出指针的大小。
他们是两个完全不同的东西,只是看起来很相似。
+1对比两个场景,其中sizeof计算工作和其他地方没有。理解以下两者之间的区别至关重要:(1)声明为函数参数的数组(变相指针); (2)是一个局部变量的数组; (3)在当前文件中定义的文件范围变量; (4)在其他文件中定义并用不完整类型声明的外部变量。 –
请张贴您的代码。乍一看,你想要在运行时计算一个值的具体解决方案是不可能的。
但是,您可能能够代码/定义一个宏为:
#define strsize sizeof(stringArray)/sizeof(char *)
如果字符串数组是字符数组的指针,但没有看到你的源也很难提出具体的解决方案。
有时一个虽然不是直接可能的解决方案仍然可以实现,但通过其他方法!
我的心并不想给你+1淹没我的希望... – kBisla
@BlueFlame那么你总是可以使用支持它的语言,如果通过长度对你来说太麻烦了。或者将它包装在你自己的数组struct –
作为一个整数指针传递给生成sting数组的fn的指针... – kBisla