C++ String Variabele Verklaring

Ik heb wat problemen met een tekenreeksvariabele. Code en de fouten zijn hier: http://pastebin.com/teqcxpzd eventuele gedachten over wat ik verkeerd doe ? Houd het platform ook onafhankelijk. Bedankt!

#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*, ...)’

Antwoord 1, Autoriteit 100%

U mengt C++ en C I / O. In C++ is dit,

#include <string>
#include <iostream>
int main(void)
{
   std::string input;
   std::cin >> input;
   std::cout << input;
   return 0;
 }

Antwoord 2, Autoriteit 27%

Ik begrijp de vraag om te zijn: hoe maak je een reeksverklaring in C++?
Hier is een kort programma om te demonstreren:

#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;
}

Dus, voeg cstdlib toe aan het begin van je programma. In de praktijk betekent dit het typen van string in plaats van std::string, cout in plaats van std::cout enzovoort. De stringvariabele zelf (in het voorbeeld is de stringvariabele your_name) wordt gedeclareerd met string.

Stel dat je het programma hebt opgeslagen met de bestandsnaam ‘str_example.cpp’
Om het programma te compileren op de opdrachtregel (in Linux):

g++ -o str_example str_example.cpp

Hiermee wordt een uitvoerbaar objectbestand gemaakt met de naam str_example (geen bestandsextensie).
En tot slot, ervan uitgaande dat u zich in dezelfde map bevindt als het programma, om het uit te voeren:

./str_example

De man-pagina voor g++ is uitgebreid, maar wordt niet standaard meegeleverd. Om g++-documentatie te installeren met behulp van de pakketbeheerder van aptitude:

sudo apt-get install gcc-7-doc

Merk op dat de ‘7’ verwijst naar versie 7; de huidige versie op het moment van schrijven. Ik hoop dat dat helpt.


Antwoord 3, autoriteit 18%

kan ‘std::string’ niet converteren naar ‘const
char*’ voor argument ‘1’ tot ‘int
printf(const char*, …)’

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

U probeert de functieaanwijzeraan scanftoe te wijzen aan een tekenreeksvariabele. U kunt dat niet doen, daarom krijgt u de eerste foutmelding. De juiste syntaxis zou zijn.

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

Maar dat is een zeer C-stijl manier om dingen te doen. De idiomatische manier om input in C++ te lezen is met std::cin >> inputZoals Nathan heeft voorgesteld.

Kan ‘STD :: string’ niet converteren naar ‘const
char * ‘for argument’ 1 ‘to’ int
PrintF (const char *, …) ‘

printf(input); //Print text

printfneemt een const char*als het eerste argument, geen std::string. U kunt .c_str()gebruiken om te converteren naar een C-Style-string. Maar Nooit Pass-gebruikersinvoer als het eerste argument voor printf; De gebruiker kan vervelende dingen doen door %‘in de tekenreeks te plaatsen. Als u op de C-Style-uitvoer staat, is de juiste syntaxis:

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

Maar het C++ – stijlalternatief is std::cout << input;.

Other episodes