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 標準は完全にはサポートされていません。最新の C のサポートを追加することを奨励するために、MS Connect のこのバグ レポートを参照してください (そして投票してください!) 。コンパイラ チームからのこのブログ エントリには、いくつかの関連情報も含まれています。

ただし、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 に答える