Объявление строковой переменной C ++ - PullRequest
7 голосов
/ 20 января 2011

У меня проблемы с объявлением строковой переменной. Код и ошибки здесь: http://pastebin.com/TEQCxpZd Есть мысли о том, что я делаю не так? Кроме того, пожалуйста, держите его независимым от платформы. Спасибо!

#include <stdio.h>
#include <string>
using namespace std;

int main()
{
    string input; //Declare variable holding a string

    input = scanf; //Get input and assign it to variable
    printf(input); //Print text
    return 0;
}


Getting this from GCC:

main.cpp: In function ‘int main()’:
main.cpp:53:10: error: invalid conversion from ‘int (*)(const char*, ...)’ to ‘char’
main.cpp:53:10: error:   initializing argument 1 of ‘std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(_CharT) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>, std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string<char>]’
main.cpp:54:14: error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int printf(const char*, ...)’

Ответы [ 3 ]

8 голосов
/ 20 января 2011

Вы смешиваете c ++ и c I / O.В C ++ это

#include <string>
#include <iostream>

int main(void)
{
   std::string input;
   std::cin >> input;
   std::cout << input;
   return 0;
 }
2 голосов
/ 20 января 2011

не может конвертировать ‘std :: string ’в‘ const char * ’для аргумента« 1 »в« int » printf (const char *, ...) ’

input = scanf; //Get input and assign it to variable

Вы пытаетесь присвоить указатель функции на scanf строковой переменной. Вы не можете сделать это, вот почему вы получаете первую ошибку. Правильный синтаксис будет.

char buffer[BIG_ENOUGH_SIZE];
scanf("%*s", sizeof(buffer) - 1, buffer);
input = buffer;

Но это очень стиль C-стиля. Идиоматический способ чтения ввода в C ++ - с std::cin >> input, как предложил Натан.

не может преобразовать ‘std :: string ’в‘ const char * ’для аргумента« 1 »в« int » printf (const char *, ...) ’

printf(input); //Print text

printf принимает const char* в качестве первого аргумента, а не std::string. Вы можете использовать .c_str() для преобразования в строку в стиле C. Но никогда не передает пользовательский ввод в качестве первого аргумента printf; пользователь может делать неприятные вещи, помещая % в строку. Если вы настаиваете на выводе в стиле C, правильный синтаксис:

printf("%s", input.c_str());

Но альтернатива в стиле C ++ - std::cout << input;.

1 голос
/ 11 декабря 2017

Я понимаю, что вопрос таков: как сделать объявление строки в C ++? Вот короткая программа для демонстрации:

#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
    string your_name;
    cout << "Enter your name: ";
    cin >> your_name;
    cout << "Hi, " << your_name << "!\n";
    return 0;
}

Итак, включите cstdlib в начале вашей программы. На практике это означает ввод строки вместо std :: string, cout вместо std :: cout и так далее. Сама строковая переменная (в данном примере строковая переменная - ваше_имя) объявляется со строкой.

Допустим, вы сохранили программу с именем файла 'str_example.cpp' Чтобы скомпилировать программу из командной строки (в Linux):

g++ -o str_example str_example.cpp

Это создает исполняемый объектный файл с именем str_example (без расширения файла). И, наконец, при условии, что вы находитесь в том же каталоге, что и программа, для ее запуска:

./str_example

Страница man для g ++ обширна, но не включена по умолчанию. Чтобы установить документацию g ++ с помощью менеджера пакетов aptitude:

sudo apt-get install gcc-7-doc

Обратите внимание, что «7» относится к версии 7; текущая версия на момент написания. Надеюсь, это поможет.

...