为什么不编译?

时间:2010-06-22 05:03:09

标签: c windows winapi

#include <stdio.h>
#include <Windows.h>

int main()
{
    TCHAR buff[1024];
    GetLogicalDriveStrings(1024, buff);

    int i;
    for(i = 0; buff[i] != 0; i += 4)
        printf("%S", buff+i);
}

当我尝试使用MSVC编译它时,我收到以下错误:

http://ahb.me/5T-

注释掉GetLogicalDriveStrings(1024, buff);会导致代码编译得很好

3 个答案:

答案 0 :(得分:7)

旧版本的C需要在块的开头声明局部变量,然后再进行函数调用。将int i;移动到函数顶部,使其声明为buff

C ++与C99一样废除了这一要求。

答案 1 :(得分:1)

将其更改为:

#include <stdio.h>
#include <Windows.h>

int main()
{
    int i;
    TCHAR buff[1024];
    GetLogicalDriveStrings(1024, buff);

    for(i = 0; buff[i] != 0; i += 4)
        printf("%S", buff+i);
}

在调用C中的函数之前声明变量。

答案 2 :(得分:0)

将“int i”移动到“TCHAR buff [1024]”之前或之后的行,或将main.c重命名为main.cpp

不过,一旦你决定使用TCHAR,你应该使用_t系列函数/宏:

_tprintf(_T( “...”))