2013-06-20 3 views
3

Я получаю эту ошибку строка uneclared при компиляции этого кода.Ошибка при компиляции кода

#include <stdio.h> 
#include <stdlib.h> 


int main() 
{ 
string names; 
printf("What is your name?\n"); 
scanf("%s", &names); 

printf("Your name is %s", names); 
return 0; 
} 

Может кто-нибудь сказать мне, почему. Большое спасибо

+0

Включите заголовок 'string'. И добавьте 'std', как @taocp. –

+0

Кроме того, 'printf' является функцией C, которая не знает потоков. Используйте 'cin' и' cout' вместо старых функций C. – Wug

+0

Какой компилятор вы используете? – banuj

ответ

8

вы должны включать в себя строку заголовка:

#include <string> 

и не забывают имен std при его использовании:

std::string names; 

Кроме того, не следует смешивать C и C++, когда вам код. Попробуйте использовать std::cout не printf, cin/getline не scanf.

+2

В частности, передача объекта 'std :: string' (имена в этом случае) в качестве аргумента' printf' определенно не будет работать должным образом. –

+0

@MatsPetersson Это еще одна отличная точка, которую я забыл. Спасибо! – taocp

0

Поскольку std :: string определен в строке заголовка, которую вы не включили, и потому что его полное и правильное имя является std :: string, а не просто строкой.

3

Вам нужно добавить

#include <string> 

ссылаться на строку из стандартной библиотеки C++ и состояние, которое вы используете зЬй с

using namespace std; 

См here.

2

Если вы пишете C++, то стандартный класс строк называется std::string и находится в заголовке <string>. Но как правило, не требуется использовать printf или scanf с ним, вы будете использовать C++ I/O:

#include <iostream> 
#include <string> 

int main() 
{ 
    using namespace std; 
    string names; 
    cout << "What is your name?" << endl; 
    getline(cin, names); 
    cout << "Your name is " << names << endl; 
} 

Если (несмотря на вопрос тэгом) вы пишете C, то нет никакого типа называется string. Строки обычно представлены массивами символов:

char names[SOME_LARGE_NUMBER]; 

, но нужно учитывать, что, если вы не очень осторожны, scanf может переполнить буфер и вызвать всевозможные ошибки во время выполнения.

0

Вы пропустили файл заголовка, который содержит определение printf и scanf. Добавьте код #include <string.h>.

Кроме того, я думаю, что код работает без линии return 0; в конце.