WIN32和其他c字符串之间的区别

时间:2011-03-30 07:25:17

标签: c arrays string pointers

我在一个小程序中得到了这个代码来读取文件:

#ifdef WIN32
    unsigned char *buffer = (unsigned char *)alloca((unsigned int)ui.length);
#else
    unsigned char buffer[ui.length];
#endif

为什么用于Win32平台的指针和用于其他平台的字符数组?

2 个答案:

答案 0 :(得分:2)

以前似乎不支持C99在堆栈上定义可变长度数组。 alloca基本上是这样做的。似乎这个程序员有一个不支持VLA的WIN32编译器所以使用(支持得很好但非标准的)alloca。

关于堆栈溢出的更多内容:Why is the use of alloca() not considered good practice?以及Arthur在堆栈溢出帖子中提到的这个相当有用的数组摘要http://www.programmersheaven.com/2/Pointers-and-Arrays-page-2

答案 1 :(得分:2)

Windows中没有什么特别之处。不同的是Microsoft Visual C ++ does not support Variable-length array (VLA)(C99功能),作者可能认为MSVC == WIN32,因此创建了条件。