错误C2065:&x27;cp';:未声明的标识符

错误C2065:&x27;cp';:未声明的标识符,c,arrays,string,visual-studio-2010,C,Arrays,String,Visual Studio 2010,我是C语言的新手,我在互联网上找到了关于字符串和数组的教程,并尝试编写了这个程序。他们正在使用eclipse,我正在使用Visual Studio 2010…请帮助并解释。 我遇到了这些问题: error C2143: syntax error : missing ';' before 'type' error C2143: syntax error : missing ';' before 'type' error C2143: syntax error : missing ')' befor

我是C语言的新手,我在互联网上找到了关于字符串和数组的教程,并尝试编写了这个程序。他们正在使用eclipse,我正在使用Visual Studio 2010…请帮助并解释。 我遇到了这些问题:

error C2143: syntax error : missing ';' before 'type'
error C2143: syntax error : missing ';' before 'type'
error C2143: syntax error : missing ')' before 'type'
error C2143: syntax error : missing ';' before 'type'
error C2065: 'cp' : undeclared identifier
error C2100: illegal indirection
warning C4552: '!=' : operator has no effect; expected operator with side-effect
error C2059: syntax error : ')'
error C2065: 'cp' : undeclared identifier
error C2143: syntax error : missing ';' before '{'
error C2065: 'cp' : undeclared identifier
error C2100: illegal indirection
代码如下:

#include <stdio.h>
#include <conio.h>


int main(char argc, char**argv){
    char s[] = "string";
    printf("string is: %s\n", s);

    for(char *cp = s; *cp !=0; ++cp) {
        printf("char is %c\n", *cp);
    }
    getch();
}
#包括
#包括
int main(字符argc,字符**argv){
字符s[]=“字符串”;
printf(“字符串为:%s\n”,s);
对于(char*cp=s;*cp!=0;++cp){
printf(“字符为%c\n”,*cp);
}
getch();
}

微软的C编译器只实现C90标准(加上一些扩展)。它不完全支持较新的C99或C11标准。请参阅(并投票赞成!)以鼓励他们添加对现代C语言的支持。来自编译器团队的信息还包含一些相关信息

不过,结果是,您不能在
for
循环的初始化中声明变量。事实上,唯一可以声明变量的地方是块的最顶端

如果您将
cp
的声明移动到方法块的顶部,它将正常编译

int main(char argc, char**argv){
    char s[] = "string";
    char *cp = s;//move to here

    printf("string is: %s\n", s);        

    for(; *cp !=0; ++cp) {
        printf("char is %c\n", *cp);
    }
    getch();
    return 0;// you should return some value
}

或者,您可以在函数体中引入一个新的块作用域。

实际上,它是从C99开始引入的。现在,C已经是C11了。然而,微软的C编译器只支持c89(和一些扩展)@Zoidberg抱歉。我的错误,但问题似乎是由这种语法引起的。也许他的编译器不支持这种语法。@不,是的,strandards很好,但现实是痛苦的。。hah@zoujyjs我试着这么做,但它不起作用VS2012对此很满意:)旁注:将
char argc
更改为
int argc
@gongzhitaao它有什么编译器?@感觉它不起作用好像你在用C89编译器运行。不允许像for循环这样的内联decl。