2013-03-30 3 views
0

Я новичок в C, я нашел этот учебник о струнах и массивах в Интернете и попытался выполнить программу. Они используют eclipse, и я использую Visual Studio 2010 ... пожалуйста, помогите и объясните. Я получаю эти проблемы:ошибка C2065: 'cp': необъявленный идентификатор

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(); 
} 
+0

vs2012 доволен этим :) – gongzhitaao

+0

Сторона примечания: измените 'char argc' на' int argc'. – Perception

+0

@gongzhitaao какой у компилятора есть? – eLg

ответ

2

C компилятор от Microsoft реализует только стандарты C90 (плюс несколько расширений). Он не имеет полной поддержки для новых стандартов C99 или C11. См. (И голосуйте за!) this bug report on MS Connect, чтобы побудить их добавить поддержку для современного C. This blog entry от команды компилятора также содержит некоторую релевантную информацию.

Однако, вы не можете объявить переменные при инициализации цикла 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 
} 

В качестве альтернативы вы можете ввести новый блок в теле своей функции.

+2

Собственно, это происходит с C99. И в настоящее время C уже C11. – 2013-03-30 02:21:08

+2

Компилятор Microsoft C, однако, поддерживает только c89 (и несколько расширений) – nos

+0

@ Zoidberg извините. Моя ошибка, но, похоже, проблема вызвана этим синтаксисом. Возможно, его компилятор не поддерживает этот синтаксис. – zoujyjs

Смежные вопросы