web-dev-qa-db-ja.com

C ++文字列変数宣言

文字列変数の宣言に問題があります。コードとエラーはここにあります: 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*, ...)’
7
Mike

C++とcI/Oを混在させています。 C++では、これは、

#include <string>
#include <iostream>

int main(void)
{
   std::string input;
   std::cin >> input;
   std::cout << input;
   return 0;
 }
8
Naveen

私は質問を理解しています: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の代わりにstringを入力し、std :: coutの代わりにcoutを入力することを意味します。文字列変数自体(この例では、文字列変数はyour_name)はstringで宣言されています。

プログラムをファイル名「str_example.cpp」で保存したとしましょう。コマンドラインでプログラムをコンパイルするには(Linuxの場合):

g++ -o str_example str_example.cpp

これにより、str_example(ファイル拡張子なし)という実行可能オブジェクトファイルが作成されます。そして最後に、プログラムと同じディレクトリにいると仮定して、それを実行します。

./str_example

G ++のマニュアルページは広範ですが、デフォルトでは含まれていません。 aptitudeパッケージマネージャーを使用してg ++ドキュメントをインストールするには:

Sudo apt-get install gcc-7-doc

「7」はバージョン7を指すことに注意してください。執筆時点での現在のバージョン。お役に立てば幸いです。

2
user8468899

引数「1」の「std :: string」を「constchar *」から「intprintf(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_を使用することです。

引数「1」の「std :: string」を「constchar *」から「intprintf(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;_です。

2
dan04