0

我是 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();
}
4

1 回答 1

2

Microsoft 的 C 编译器仅实现 C90 标准(加上一些扩展)。它不完全支持较新的 C99 或 C11 标准。请参阅(并投票!)MS Connect 上的此错误报告,以鼓励他们添加对现代 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
}

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

于 2013-03-30T02:20:15.063 回答