我正在读取一些C++代码(SGP4,一个卫星传播代码),我发现了以下函数声明:
void twoline2rv(char longstr1[130], char longstr2[130], char typerun,
char typeinput, char opsmode, gravconsttype whichconst,
double &startmfe, double &stopmfe, double &deltamin,
elsetrec &satrec);我想知道在函数参数中说char longstr1[130]是什么意思。为什么编译器需要知道数组的长度是130个字节?为什么不说char *longstr1呢?
发布于 2019-01-31 02:57:36
这是一种误导性的代码。这些参数的字面意思是char *longstr1 (ugh)。没有边界检查,什么都没有。您可以将指针传递给任意长度的数组。看来你已经知道了。
现在,有人可能会争辩说,这种方法是自我记录的,但我会说它记录的是一个谎言。如果指针“应该”有一个特定的界限,那么应该在函数的声明之上记录注释,而不是向读者建议它将通过类型强制执行。有可能是作者这么想的!
最后,要真正找出为什么它是这样写的,你应该找到作者并询问他们。其他的一切都是猜测。
发布于 2019-01-31 02:56:21
这是一样的;声明会衰减到char *longstr1,但对于阅读该API的人来说,它需要的缓冲区正好是130个字符,这更能说明问题。
https://stackoverflow.com/questions/54447649
复制相似问题